技术 · 2023 年 3 月 21 日

Ubuntu xray启用IPv6并只使用IPv6地址&smardns启用双栈优化

原以为所有提供IPv6地址的服务器都自动启用的,结果好多默认是没有启用的。
Ubuntu 22.04 启用IPv6地址:
修改文件:/etc/netplan/10-gmovps.yaml 别的服务器可能不是这个文件名01-netcfg.yaml 50-cloud-init.yaml等等
将原本的内容修改如下:
假设服务器IPv4地址是160.248.68.110,IPv6地址是2001:02C0:0006:0300:0020:cafe:0006:0001

network:
    ethernets:
        eth0:
            addresses:
                - 160.248.68.110/24
                - 2001:02C0:0006:0300:0020:cafe:0006:0001/64
            dhcp4: true
            dhcp6: false
            accept-ra: false
            optional: true
            nameservers: #DNS服务器的地址,如果安装了smartdns可以把这4行去掉
                addresses:
                    - 8.8.8.8
                    - 2001:2C0:1:C::16
            routes: #主要是这里,如果没有修改的话,网关可能不会起作用,有时会报错。
                - to: default
                  via: 160.248.68.1 #网关地址
                - to: default
                  via: 2001:02C0:0006:0300::1 #网关地址
    version: 2

然后运行

# netplan apply

查看 ip信息:

# ip addr show
ens10: <broadcast,multicast,up,lower_up> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:02:00:1e brd ff:ff:ff:ff:ff:ff
altname enp0s10
inet 160.248.68.110/24 brd 160.248.68.255 scope global ens10
valid_lft forever preferred_lft forever
inet6 2001:2c0:6:300:20:cafe:6:1/64 scope global #有这一行global就说明OK了。
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe02:1e/64 scope link

OK,现在已经启用好了。一般新的服务器已经默认优先使用IPv6地址了,如果不是可以修改文件

/etc/gai.conf 最后的数字10是优先级,可以把注释符号#去掉,就 行了。也可以把10改成100,就表示优先使用IPv4。修改后保存,即使生效。

#precedence ::ffff:0:0/96  10

如果IPv4被墙了,可以让代理只用IPv6,还需要修改v2ray的配置文件:

/etc/v2ray-agent/xray/conf/

{
  "outbounds": [
    {
      "protocol": "freedom",
      "settings": {
        "domainStrategy": "UseIPv6"
      },
      "tag": "IPv6-out"
    },
    {
      "protocol": "freedom",
      "settings": {},
      "tag": "direct"
    },
    {
      "protocol": "blackhole",
      "tag": "blackhole-out"
    }
  ]
}

参考:v2ray 指定对网站使用 IPv4 或 IPv6 出口 – Zikin的独立博客

但是IPv6的速度一般比IPv4慢,我们可以选用smartDNS,自动获取网站的最快IP进行访问。

其中修改服务器的DNS,需要按照如下步骤:

在 Ubuntu 22.04 中,/etc/resolv.conf 文件是由 systemd-resolved 服务动态生成的。这意味着如果您手动修改 /etc/resolv.conf 文件,这些更改在系统重新启动或网络服务重启后会被覆盖。
如果您想永久更改系统的 DNS 服务器设置,建议通过 systemd-resolved 服务的配置文件来进行设置,而不是直接修改 /etc/resolv.conf 文件。这样可以确保您的 DNS 服务器设置在系统重新启动后仍然有效。
以下是如何配置 systemd-resolved 服务的步骤:
首先,确认你已经正确地保存了所有的配置文件。:
确保你已经正确地编辑了/etc/systemd/resolved.conf文件。在该文件中找到DNS=这一行,将其修改为DNS=127.0.0.1。如果有其他DNS服务器的地址,请删除或注释掉它们。然后保存并关闭文件。
为了使新的配置生效,请重启systemd-resolved服务。运行以下命令:

sudo systemctl restart systemd-resolved
确认systemd-resolved服务已经使用了新的配置。运行以下命令:

sudo systemctl status systemd-resolved
检查输出结果中有无错误信息,并确保服务正常运行。
检查/etc/resolv.conf文件的内容是否已经更新。运行以下命令:

cat /etc/resolv.conf
如果文件中的DNS地址仍然是127.0.0.53,可以尝试重新创建符号链接,以便systemd-resolved使用正确的配置。运行以下命令:

sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
再次检查/etc/resolv.conf文件的内容,确认DNS地址已经更新为127.0.0.1
最后,重启你的服务器,然后再次运行nslookup命令,确认DNS地址仍然是127.0.0.1
完成上述步骤后,您的系统将使用您指定的 DNS 服务器设置进行 DNS 查询,并且这些设置将在系统重新启动后仍然有效。

参考: https://blog.xmgspace.me/archives/vps-add-he-ipv6.html