Linux增加双栈(增加vps IPv6地址)

1244 10~14 min

Linux增加双栈(增加vps IPv6地址)

国外购买的便宜vps只有一个IPv4的公网IP,想要增加一个IPv6的IP(本文只针对购买的vps没有IPv6的地址)

IPv6可以干什么

  • 解决VPS频繁Google人机验证(IP被ban)
  • 解锁奈非
  • .....

申请免费的IPv6隧道(Tunnelbroker)

首先申请一个免费的IPv6隧道,这里我使用的是Tunnelbroker,免费简单好用。

  1. 申请账号的过程非常简单,输入一些虚拟的个人信息就行,直接胡编乱填就行了,或者在虚拟外国身份站点上随机一个身份信息,填好邮箱接受邮箱验证就完事了。
  2. 申请IPv6隧道
    image.png
    在 Tunnel Details 页面可以看到创建的 IPv6 隧道的详细信息,其中 Client IPv6 Address 是申请到公网 IPv6 地址。
    image.png
  3. 配置IPv6到vps
  • 获取配置示例
    在 Tunnel Details 页面有个 Example Configuration 选项卡,在这里你可以选择合适的配置示例。就比如这里有 De­bian/​Ubuntu 的 interfaces 配置文件示例:
    image.png
    只要基于 De­bian 的发行版和使用 interfaces 配置文件的系统理论上都可以使用。其它不兼容的发行版则可以使用 Linux-net-toolsLinux-route2 示例手动输入命令。centos推荐使用Linux-net-tools
  • 配置VPS
    将 he-ipv6 配置文件添加到 /etc/network/interfaces.d/ 目录下。下面是一把梭命令示例,根据实际情况替换文本。
sudo tee /etc/network/interfaces.d/he-ipv6 <<EOF
auto he-ipv6
iface he-ipv6 inet6 v4tunnel
        address 2001:xxx:xxxx:xxxx::2
        netmask 64
        endpoint 216.66.84.46
        local 233.233.233.233
        ttl 255
        gateway 2001:xxx:xxxx:xxxx::1
EOF

TIPS: 如果是 NAT VPS 或 VPC 内网方案则需要将local字段后面的公网 IP 替换为内网 IP (获取命令:ip route get 8.8.8.8 | grep -oP 'src \K\S+')。

  • 启用 IPv6 隧道
# 安装网络工具包
sudo apt update
sudo apt install net-tools iproute2 -y
# 启动`he-ipv6`网络接口
sudo ifup he-ipv6

TIPS:若提示 ifup: unknown interface he-ipv6 ,则添加source /etc/network/interfaces.d/到/etc/network/interfaces文件(一把梭命令:echo 'source /etc/network/interfaces.d/' >>/etc/network/interfaces)后重试,正常情况下无输出。

  • 启用后执行 ifconfig 命令,这时应该有一个 he-ipv6 接口,类似下面这样:
he-ipv6: flags=209<UP,POINTOPOINT,RUNNING,NOARP>  mtu 1480
          inet6 2001:xxx:xxxx:xxxx::2  prefixlen 64  scopeid 0x0<global>
          inet6 fe80::xxxx:xxxx  prefixlen 64  scopeid 0x20<link>
          sit  txqueuelen 1000  (IPv6-in-IPv4)
          RX packets 11605  bytes 3127821 (3.1 MB)
          RX errors 0  dropped 0  overruns 0  frame 0
          TX packets 13811  bytes 2403522 (2.4 MB)
          TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  • 重启网络
sudo systemctl restart networking
  • DNS 设置
    编辑 /etc/resolv.conf 文件,更改 DNS 解析服务器为支持查询 AAAA 记录的 DNS 服务器,比如 Google Public DNS。
nameserver 8.8.8.8
nameserver 8.8.4.4

禁用IPv6隧道(删除 IPv6 隧道)

# 停用隧道
sudo ifdown he-ipv6
# 删除 he-ipv6 网络接口配置文件(若没有删除重启后会自动启用)
sudo rm -f /etc/network/interfaces.d/he-ipv6

双栈优先使用IPv4配置

虽然目前很多网站或服务都已经增加IPv6,但是各家的IPv6使用上并不一定畅通。所以我们要设置一下让IPv4作为默认的连接方式。但是根据RFC3484协议Linux默认情况下IPv6优先级高于IPv4,应用程序优先使用IPv6地址。

  1. 如果要使用ipv4连接优先也不禁用IPv6,需要修改gai.conf配置文件使其生效。编辑 /etc/gai.conf 文件,查找 precedence ::ffff:0:0/96 100 将前面的注释 # 去掉并保存,如果前面没有 # 号表示已经更改过设置了。如果没有查找到该行直接在文件末尾添加上precedence ::ffff:0:0/96 100
    注:
    CentOS默认没有 /etc/gai.conf 该文件,可以执行命令
cp -p /usr/share/doc/glibc-common-2.17/gai.conf /etc/

拷贝该文件后修改。修改完成保存生效。这样设置后有IPv4的话优先使用IPv4,也不影响IPv6的使用。
注:::ffff:0:0/96 为IPv4/IPv6转换地址 (IPv4-mapped IPv6 address)。

  1. 测试配置是否生效
  curl ifconfig.me

测试IPv6是否接入成功

终端测试是否成功配置好IPv6

# 国内
ping6 www.baidu.com
# 国外
ping6 www.google.com

科学上网可以连接上配置IPv6的vps访问如下网址:IPv6测试

禁用IPv6

如果确实不需要IPv6,我们可以禁用IPv6
执行命令:

echo "1" > /proc/sys/net/ipv6/conf/all/disable_ipv6

这样就掉了禁用ipv6,如需恢复的话删除掉
/proc/sys/net/ipv6/conf/all/disable_ipv6

这个文件就可以。


参考:
优先使用IPv4原理解析
IPv6测试