纯 IPv6 LXC 容器不完全使用指北

原文https://early-coil-485.notion.site/IPv6-LXC-db1d5d215b2b42a9a4ef567d743256ab#2ed0dc5c842640a08ff891e2847fdf43

wapac家的纯ipv6机子解决增加出口IPV4问题代码

/* 准备工作 */
apt update -y
apt install curl vim sudo -y

/* 三步曲 */
1. dns64
cp /etc/resolv.conf{,.bak}; echo -e “nameserver 2a00:1098:2b::1\nnameserver 2a01:4f9:c010:3f02::1\nnameserver 2a01:4f8:c2c:123f::1\nnameserver 2a00:1098:2c::1” > /etc/resolv.conf

2. warp IPv4
wget -N https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh && bash menu.sh 4

3. sba(sing-box + argo)
bash <(wget -qO- https://raw.githubusercontent.com/fscarmen/sba/main/sba.sh)

 

注意

⚠️ 本指南主要面向 WAP.ac 香港 IPv6 LXC 容器,部分软件和操作可能并不是其他环境的最优选择

⚠️ 本指南不包含一键脚本的推荐,如有需要请自行寻找可用且安全的脚本

⚠️ 所有命令均假设你在 LXC 容器中使用 root 用户操作

⚠️ 请仔细阅读所有包含感叹号、加粗、红色的重要提示

ℹ️ 示例代码以 Debian 12 系统作为基准,理论适用 Debian 11 以及近期的 Ubuntu 系统

♥ 欢迎通过评论提供错误纠正以及建议

目录

小白用户快速 Q&A

Q: 能为服务器增加可以从本地电脑连接到服务器的 IPv4 地址吗

A: 不能

Q: 能一键安装 WARP 直接给系统增加 IPv4出口吗

A: 不能

Q: 我没有 IPv6 地址也不会用代理不会用网页 SSH 能连接服务器吗

A: 不能

Q: WARP 的 IPv4 地址能建站吗

A: 不能

Q: 没有 TUN 能用 WARP 吗

A: 可以用 Socks5 模式,可以参考 手动安装 Cloudflare WARP

Q: 脚本获取不到 IP 怎么办

A: 需要官方客户端,可以参考 手动安装 Cloudflare WARP 或更换其他脚本尝试

连接服务器

需要你的本地网络支持 IPv6 或使用一台拥有 IPv6 地址的服务器作为跳板,或者将你的本地 SSH 软件设置为使用代理软件并选择支持 IPv6的节点。

如果你不知道你的本地网络是否支持 IPv6,请关闭代理 >> 点击这里查询 <<

如果你的本地网络没有 IPv6,也没有支持 IPv6 的服务器,请考虑使用网页 VNC 或咨询你的网络服务提供商如电信联通寻求帮助。不建议使用不明来源的在线 SSH,这可能会为你的信息和财产安全带来风险。

使用 NAT64 服务

由于目前仍有一些主流网站如 GitHub 尚未完全支持 IPv6,纯 IPv6 环境可能无法正常使用部分软件或脚本,你可以通过 NAT64 服务解决部分软件因没有 IPv4网络无法使用的问题。

使用 NAT64 服务将会使你的上网流量通过对方的服务器转发,当对方服务器距离过远或负载过高时可能会严重影响网络速度,请酌情使用。

⚠️ NAT64 服务依赖于域名和 DNS64,如果软件或脚本并未使用域名或者使用了非标准端口,可能仍然无法正常使用。

⚠️ 教程中使用的 NAT64 服务器位于芬兰,不建议用于搭建节点日常上网使用

⚠️ 可能会导致未单独配置 DNS 的代理软件服务端访问纯 IPv4 网站无法正常回落 WARP,详情请参考后续章节提示

修改 DNS 启用 NAT64 服务

cp /etc/resolv.conf /etc/resolv.conf.nat64.bak # 备份原有配置文件
echo nameserver 2a01:4f8:c2c:123f::1 | tee /etc/resolv.conf # 覆盖为新的 DNS

**DNS 设置持久化:**LXC 容器 DNS 修改可能会在重启后被覆盖。如果你希望你的修改永久生效,请使用以下命令: touch /etc/.pve-ignore.resolv.conf

恢复原有 DNS 设置

# 需要有上一步的备份文件才能还原为原有状态
yes | cp -rf /etc/resolv.conf.nat64.bak /etc/resolv.conf

# 这一步为可选,为避免影响可能存在的解锁服务,请自行决定是否修改。
# 如果没有备份也可以设置为免费的公共 DNS,如:
# echo nameserver 2620:fe::fe | tee /etc/resolv.conf

手动安装 Cloudflare WARP

⚠️ 这里使用的是官方 WARP 客户端,如果你希望在代理软件中直接以 Wireguard 方式接入请参考末尾 “在代理软件中直接接入 WARP 的章节”。 不推荐直接接入Wireguard,可能存在问题。

由于 LXC 容器的限制和容错性考虑、Cloudflare 对于部分地区标准 Wireguard 协议的限制、WARP 本身的用途和原理,以及主要面向的 WAP.ac 香港 LXC,此处提到的 WARP:

    • 不能为系统增加无痛的、全局的 IPv4 网络访问能力

    • 必须使用官方 WARP Linux 客户端

安装 WARP 客户端

apt update && apt install -y curl gnupg lsb-release
# 👇 没错,这一步没有任何输出
curl -fsSL <https://pkg.cloudflareclient.com/pubkey.gpg> |  gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] <https://pkg.cloudflareclient.com/> $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/cloudflare-client.list

apt update && apt install -y cloudflare-warp

注册 WARP 和修改设置

以下命令将会开启一个监听 127.0.0.1:1835Socks5 WARP 代理,并开机自动启动。

warp-cli register # 根据提示输入 Y,确认你已阅读并同意许可协议
warp-cli set-mode proxy # 启用 Socks5 / HTTP 代理模式
warp-cli set-proxy-port 1835 # Socks5 代理监听端口,可以自行修改但需要记住
warp-cli connect
warp-cli enable-always-on

测试 WARP 可用性

curl -4 -x socks5://127.0.0.1:1835 ip.sb

正常输出: 104.28.. 或 2a09:bac5:::*

如出现错误或其他输出,请检查注册与设置 WARP 部分是否出现错误。

为系统内软件启用 WARP 代理

⚠️ 进行以下操作前请务必确保 WARP 监听的 Socks5 代理端口正常工作

临时为部分软件启用代理

需要软件支持读取环境变量中的代理设置,常用软件大多数支持自动读取代理,如 curl、wget 等工具。如果不确定或不支持请参考后续的强制代理部分。

# 首选
export all_proxy=socks5://127.0.0.1:1835 && export ALL_PROXY=socks5://127.0.0.1:1835

# 不推荐,可能会遇到问题
export http_proxy=http://127.0.0.1:1835 && export https_proxy=http://127.0.0.1:1835 && export HTTP_PROXY=http://127.0.0.1:1835 && export HTTPS_PROXY=http://127.0.0.1:1835

如果你希望以上设置长期生效,可以通过使用 nano ~/.bashrc 命令编辑 BASH 配置文件,选择一种方式加到文件最后一行。

为不支持的软件强制启用代理

对于不支持设置代理的软件,你也可以通过使用 proxychains4 的方式为它们强制启用代理,但请注意这种方式只支持 TCP 连接

安装

apt update && apt install -y proxychains4

配置

使用编辑器打开配置文件,并跳转到文件末尾:

nano /etc/proxychains4.conf

找到文件中的端口配置,并修改为之前配置 WARP 时设置的端口,如:

[ProxyList]
# 格式:socks5 127.0.0.1 你的端口
socks5  127.0.0.1 1835

请注意是 socks5,不是 socks4,也不是 http,更不是 https。

使用

在你需要强制代理的命令前加入 proxychains4 , 例如:

# 以下内容仅为演示用途,不理解时请勿复制粘贴执行
proxychains4 curl ip.sb
proxychains4 python example.py

为 V2RAY、XRAY、sing-box 配置 SOCKS5 出站代理

由于前文提到的原因,当你需要在 LXC 容器内搭建代理并使用 WARP 为代理增加访问纯 IPv4 网站的能力时,需要增加一个 socks5 出站将流量发送给 WARP 客户端。

ℹ️ ****使用面板的用户请参考配置示例和讲解自行添加出站和路由规则即可使用

⚠️ 关于同时在系统内使用 NAT64 的提示

代理软件服务端没有配置 DNS、设置了如下文所述的优先 IPv6 的规则,且系统使用了 NAT64 DNS 时,使用域名访问的纯 IPv4 网站将会优先使用 NAT64 而不是回落到 WARP。请考虑在代理软件服务端中单独指定普通 IPv6 DNS。

⚠️ 关于 IPv6 优先直连出站,IPv4 回落 WARP 的提示

请确保代理软件服务端已正确进行如下设置,否则代理可能无法正常优先 IPv6 直连出站甚至无法正常联网。

    • V2Ray/ XRAY
        • 在入站处开启域名嗅探和目标地址覆写

        • 在路由规则中设置解析策略为 AsIs 以外的值, 如 IPOnDemand 或 IPIfNonMatch

    • Sing-box
        • 在入站处开启域名嗅探、目标地址覆写、解析策略优先 IPv6

入站规则

⚠️ 请确保已开启流量探测和目标地址覆写,否则可能出现以下问题

    • 客户端优先 IPv4 且使用 IP 作为目标地址且未设置 WARP 出站时,可能无法访问网站

    • 客户端使用域名作为目标地址但配置了 WARP 出站时,路由 IP 规则未生效导致流量全部通过 WARP 发送或仅能访问 IPv6 网站

    • 客户端使用 IP 地址作为目标地址时,IP 地址对于服务端可能不是最优 CDN

V2Ray 或 Xray

{
  "inbounds": [
    {
      "type": "示例内容",
      // ... 你的其他入站设置
      // 👇开启流量探测和目标地址覆写
      "sniffing": {
        "enabled": true,
        "destOverride": [
            "http",
            "tls"
        ],
      }
      // ... 你的其他入站设置
    }
  ]
}

Sing-box

{
  "inbounds": [
    {
      "type": "示例内容",
      // ... 你的其他入站设置
      // 👇 开启流量探测、目标地址覆写、解析策略优先 IPv6
      "sniff": true,
      "sniff_override_destination": true,
      "domain_strategy": "prefer_ipv6",
      // ... 你的其他入站设置
    }
  ]
}

路由规则

示例中包含了两个规则,IPv6 流量使用直连出站,IPv4 流量使用 WARP 出站。

如果需要全部使用 WARP 出站,请将第一个规则中的 direct 修改为 outbound-warp

IP 为 ::/0 的规则匹配了全部 IPv6 流量,IP 为 0.0.0.0/0 的规则匹配了全部 IPv4 流量。

V2Ray 或 Xray

{
  "routing": {
    // 👇 **非常重要,请勿忽略**
    "domainStrategy": "IPOnDemand",

    "rules": [
      { // IPv6 直连出站规则
        "type": "field",
        "ip": [ "::/0" ],
        "outboundTag": "direct"
      },
      { // IPv4 WARP 出站规则
        "type": "field",
        "ip": [ "0.0.0.0/0" ],
        "outboundTag": "outbound-warp"
      }
    ]
  }
}

sing-box

{
    "route": {
        "rules": [
            {
                "ip_cidr": [ "::/0" ],
                "outbound": "direct"
            },
            {
                "ip_cidr": [ "0.0.0.0/0" ],
                "outbound": "outbound-warp"
            }
        ]
    },
}

出站规则

示例中包含两个出站规则。

一个名为 outbound-warp 将流量发送到位于 127.0.0.1:1835 的 Socks5 WARP 代理,另一个名为 direct 通过本地网络直连。

名为为 outbound-warp 的出站通过 WARP 同时提供了 IPv6 和 IPv4 联网的能力,名为 direct 的出站与容器本身相同,仅有 IPv6 联网能力。

V2Ray 或 XRay

{
  "outbounds": [
    { # Socks5 WARP 出站
      "tag": "outbound-warp",
      "protocol": "socks",
      "settings": {
        "servers": [
          {
            "address": "127.0.0.1",
            "port": 1835 # 你的 WARP Socks5 端口
          }
        ]
      }
    },
    { # IPv6 直连出站
      "tag": "direct",
      "protocol": "freedom"
    }
  ]
}

sing-box

{
    "outbounds": [
        {
            "type": "socks",
            "tag": "outbound-warp",
            "server": "127.0.0.1",
            "server_port": 1835,
            "version": "5",
            "domain_strategy": "prefer_ipv6"
        },
        {
            "type": "direct",
            "domain_strategy": "ipv6_only",
            "tag": "direct"
        }
    ]
}

关于 WARP 的 UDP 与部分传统代理客户端的兼容性提示

ℹ️ ****已知可能出现此问题的客户端: V2RayNG

部分地区 (例如香港)的 WARP 可能不支持或不完全支持 UDP 流量,因此如果你的代理客户端使用了基于 UDP 协议的未加密 DNS可能会导致客户端网站访问缓慢或完全无法访问网站

怀疑此类问题出现时,请检查代理软件是否存在远程 DNS 相关设置,例如含有 DNS 字样的设置包含 1.1.1.1、8.8.8.8 的字样。

可尝试将对应的 DNS 修改为以下基于 TCP 协议的 DNS:

    • tls://dns.quad9.net

    • tcp://9.9.9.9

或在代理服务端中增加独立的 DNS 设置,并通过路由规则和 DNS 出站劫持所有 UDP 协议目标端口为 53 的 DNS流量。

Sing-box 劫持 UDP DNS 流量的示例:

⚠️ 以下内容不是完整的配置文件,仅包含劫持 UDP DNS 流量所必需的部分。

{
  "dns": {
    "servers": [
      {
        "tag": "quad9",
        "address": "tls://dns.quad9.net",
        "address_resolver": "cloudflare",
        "address_strategy": "prefer_ipv6",
        "strategy": "prefer_ipv6",
        "detour": "direct"
      },
      {
        "tag": "cloudflare",
        "address": "tls://2606:4700:4700::1111",
        "strategy": "prefer_ipv6",
        "detour": "direct"
      }
    ]
  },
  "route": {
    "rules": [
      // 👇 请确保放置在任何规则的前方,否则可能无法生效
      {
        "network": "udp",
        "port": 53,
        "outbound": "secure-dns"
      }
      // 你的其他规则
    ]
  },
  "outbounds": [
    {
      "type": "dns",
      "tag": "secure-dns"
    }
  ]
}

为其他纯 IPv4 服务器增加 IPv6 入站能力

⚠️ 请仔细阅读段落标题,这里将要提到的不是增加 IPv4,而是为纯 IPv4 服务器增加 IPv6。

⚠️ 使用 HE Tunnel Broker 服务器拥有静态 IPv4 并且响应 ICMP Ping。

⚠️ 此教程不适用于 IPv4 LXC/NAT 以及 OpenVZ 等半虚拟化容器。

⚠️ Cloudflare WARP 的 IP 已被拉黑,无法注册 HE Tunnel Broker。

HE Tunnel Broker 是一个为 IPv4 用户提供 IPv6 访问和接入能力的服务,你可以通过这项服务实现为你的服务器增加成吨的静态的、支持入站连接的 IPv6 地址。

通过为纯 IPv4 服务器增加 IPv6 地址,可以实现两端通过 IPv6 进行可靠的通讯,避免简单的需求却需要为客户端开启 WARP 增加 IPv4 连接能力连接服务器,带来复杂的操作和不稳定的因素。

注册

点击这里 (tunnelbroker.net) 访问 Tunnel Broker 官方网站,点击左侧的蓝色 Register 按钮,按要求填入个人信息后方可注册账号。

请酌情使用适当的方式填写敏感个人信息,注意隐私保护。

创建隧道

    • 登录后点击左侧的 Create Regular Tunnel 按钮,跳转到创建页面

    • 在 IPv4 Endpoint 中输入你的纯 IPv4 服务器静态 IP 注意:不是你的上网 IP

    • 根据位置或网页提供的 IP 地址选择距离你的服务器最近,延迟最低的服务器

    • 点击底部的 Create Tunnel 创建隧道

查看隧道信息

创建完成后,按照以下操作获取隧道配置文件:

    • 点击左侧的 Main Page

    • 在页面中下部分的 Configured Tunnels 中寻找刚刚创建的隧道并点击进入详情页

    • 点击上方的 Example Config 选项卡

    • 点击 Select Your OS 选择服务器的操作系统,如 Debian

以 Debian 系统为例,你将获得一个类似这样的配置文件:

⚠️ 以下内容为示例内容,其中的值均为无效值,请勿直接使用。

auto he-ipv6
iface he-ipv6 inet6 v4tunnel
        address 2001:1234:5678:abcd::2
        netmask 64
        endpoint 1.2.3.4
        local 5.6.7.8
        ttl 255
        gateway 2001:1234:5678:abcd::2

使用编辑器将配置文件粘贴到 /etc/network/interfaces 末端,如 nano /etc/network/interfaces

⚠️ 请勿删除文件中原有的内容,否则服务器可能永久性失去网络连接

⚠️ 如果文件内容为空或不存在,说明你的系统使用的不是 ifupdown 控制网络,请停止操作或谨慎操作

保存后运行 ifup he-ipv6 ,如果没有任何报错信息,运行 ip a 查看是否有类似以下内容的输出:

2: he-ipv6@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN group default qlen 1000
    link/sit 1.2.3.4 peer 5.6.7.8
    inet6 **2001**:1234:5678:abcd::2/64 scope global

如果一切正常,使用 ping 2620:fe::fe 命令测试时可以看到如下代表 IPv6 网络已经连通的输出:

PING 2620:fe::fe(2620:fe::fe) 56 data bytes
64 bytes from 2620:fe::fe: icmp_seq=1 ttl=60 time=1.11 ms
64 bytes from 2620:fe::fe: icmp_seq=2 ttl=60 time=1.10 ms
64 bytes from 2620:fe::fe: icmp_seq=3 ttl=60 time=1.45 ms

最后,如果需要使用 IPv6 入站,请参考你的软件文档了解如何监听 IPv6 地址与端口。

部分软件可以使用 0.0.0.0:: 同时监听 IPv4/6,但也有一部分只能二选一,建议参考文档谨慎操作避免影响原有服务运行。

哪吒探针客户端设置 WARP SOCKS5 代理

⚠️ 如有能力推荐直接使用带有 IPv6 的 VPS 作为主控端或使用 HE Tunnel Broker

ℹ️ 以下内容来自 Telegram 用户 Baby! (@flix0808)

使用编辑器编辑客户端服务配置文件

例: nano/etc/systemd/system/nezha-agent.service,并进行以下修改:

[Unit]
# 保持原样
[Service]
# 保持原样并在末尾添加
Environment="https_proxy=socks5://127.0.0.1:1835" # 按需替换为其他自定义端口
Environment="http_proxy=socks5://127.0.0.1:1835"

[Install]
# 保持原样

读取最新配置文件并重启服务

systemctl daemon-reload
systemctl restart nezha-agent.service

# 或

nezha.sh # 选择 "重启 Agent"

在代理软件中直接接入 WARP

⚠️ 可能不稳定或无法使用

如果你只需为代理增加 IPv4,并且确定服务器上不需要 IPv4、并且使用了以下软件,可以尝试直接将代理接入 WARP

    • Xray

    • sing-box

请自行使用第三方软件或官方客户端获取 Wireguard 连接信息,并参阅代理软件文档增加 Wireguard 出站。路由规则与前文中的 Socks5 代理相同,更改出站标签名即可。

⚠️ 关于使用 Wireguard 协议接入 WARP 可能不稳定的提示

由于 Cloudflare 对部分地区使用标准 Wireguard 协议进行的限制,当出现以下问题时,请考虑根据前文的步骤使用官方客户端

    • 向代理服务器发送请求后,服务端出现类似 wireguard [省略] handshake timeout 字样

    • 正常使用一段时间突然断网,或失去 IPv4/6 连接能力

Xray 官方文档: https://xtls.github.io/config/outbounds/wireguard.html

sing-box 官方文档: https://sing-box.sagernet.org/configuration/outbound/wireguard/

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容