ipv6 only机ipv4通讯教程

背景

  1. 一台ipv4 only 香港服务器 cstserver 2h2g,用于挂博客的
  2. 新买的sakura ipv6 only 香港服务器
  3. 有域名,已经在cf托管了
  4. 工位机器不支持ipv6(l2tp拨号,这也是我为什么做这件事情),宿舍里电脑支持ipv6。
  5. 我买的深港/厦港的专线转发不支持ipv6,为单栈。

再次鸣谢cloudflare提供的CDN、argo tunnel等服务。

目标用户

和我一样的小白用户,由于本地不支持ipv6,有ipv6入站转ipv4入站的需求,并且香港的机器还不支持ipv6,是单栈的。

当然我日本有一台双栈机,为了延迟,我不想用日本鸡拉,在不增加成本的前提下,尽量提高体验,降低延迟。

如果你已经有一台双栈香港机,直接转发就行,不必我这样麻烦。

出站ipv4

出站不是我们重点考虑的方向,因为我们主要是ipv4转ipv6的入站过程受阻。

这里有两种方法:

一、使用cf warp的ipv4出口

1、连接服务器

首先确保你本地拥有IPV6的环境,可以通过 https://ip.gs/ 检测是否拥有ipv6.

如果没有,你需要找一台拥有ipv6地址的vps中转,登录中转vps后,输入

ssh root@你的ipv6地址

2、重装VPS成你需要的系统,lxc和kvm都支持

LXC:

wget -qO OsMutation.sh https://raw.githubusercontent.com/LloydAsp/OsMutation/main/OsMutation.sh && chmod u+x OsMutation.sh && ./OsMutation.sh

具体链接:https://github.com/LloydAsp/OsMutation

KVM:

wget –no-check-certificate -qO InstallNET.sh ‘https://raw.githubusercontent.com/leitbogioro/Tools/master/Linux_reinstall/InstallNET.sh’ && chmod a+x InstallNET.sh

使用:类似于

bash  InstallNET.sh -debian 11  详情点击:重装脚本说明

重装后的默认密码:LeitboGi0ro

3、为ipv6 VPS添加一个ipv4地址

因为有些Linux的源只有ipv4,所以ipv6的机器可以先通过warp获取一个ipv4地址。

  • 确保你的LXC VPS已经开启tun/tap,如果没开启warp装不上

LXC查看tun/tap是否开启,ls /dev/net/, 如果返回tun则正常,不返回则未开启。

apt update && apt install wget curl -y

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

 1.  为 IPv6 only 添加 WARP IPv4 网络接口 (bash menu.sh 4) 
 2.  为 IPv6 only 添加 WARP IPv6 网络接口 (bash menu.sh 6) 
 3.  为 IPv6 only 添加 WARP 双栈网络接口 (bash menu.sh d) 
 4.  打开 WARP (warp o) 
 5.  安装 CloudFlare Client 并设置为 Proxy 模式 (bash menu.sh c) 
 6.  更换支持 Netflix 的 IP (warp i) 
 7.  永久关闭 WARP 网络接口,并删除 WARP、 Linux Client 和 WireProxy (warp u) 
 8.  刷 WARP+ 流量 (warp p) 
 9.  升级内核、安装BBR、DD脚本 (warp b) 
 10. 同步最新版本 (warp v) 
 11. WARP 解锁 Netflix 等流媒体专业一键(支持多平台、多方式和 TG 通知) 
 12. 安装 iptable + dnsmasq + ipset,让 WARP IPv4 only 接管流媒体流量 (不适用于 IPv6 only VPS) (bash menu.sh e) 
 13. 安装 wireproxy,让 WARP 在本地创建一个 socks5 代理 (bash menu.sh w) 
 14. 安装 CloudFlare Client 并设置为 WARP 模式 (bash menu.sh l) 
 0.  退出脚本 

ipv6 only的机器选择 第一项 即可,然后一路回车全部默认即可。

成功后会会出现如下提示

后台获取 WARP IP 中,最大尝试3次……
 第1次尝试 
 已成功获取 WARP Free 网络, 工作模式: 全局 

==============================================================

 IPv4: 104.28.243.190 法国  Cloudflare, Inc. 
 IPv6: 2001:41d0:a::f:3c14 法国  OVH SAS 
 恭喜!WARP Free 已开启,总耗时:18秒, 脚本当天运行次数:,累计运行次数: 
 IPv6 优先 , 工作模式: 全局 

至此,你的VPS已经拥有ipv4仅出口和端口全部开放的ipv6地址了

除了不能通过ipv4访问,其它与普通VPS无异了。

4、配置网站

接下来可以像正常的VPS一样使用宝塔或者lnmp之类的正常安装网站了,安装完毕进入下一步。

5、配置cdn或者ipv6 only访问

  • 如果你只需要通过ipv6访问网站,宝塔默认就是支持的,就不需要其它操作了,正常配置域名AAAA到ipv6地址即可,如果是纯IP访问需要加上括号,如 http://[aabb:ccdd::1]
  • 如果希望同时支持ipv4的用户访问,需要找到一个支持ipv4回源的cdn即可,CloudFlare就支持,设置AAAA指向ipv6地址的时候打开小云朵,这样别人就能通过域名正常访问你的网站了,同时支持ipv4和ipv6访问

 

直接按脚本一键设置即可正确设置ipv4出口。

二、使用老板提供的一键脚本

如果和我一样是sakura的ipv6小鸡推荐这个,直接挂上就是hkt ipv4出口了。
进群后自己找脚本。

入站:http/https转ipv4

主要思路:利用Cloudflare的双栈CDN,将ipv6的http入口转换为ipv4入口。

因为我懒,不想手搓,尽量都是一键脚本

具体操作案例:使用CDN反代3xui的http入口。组合为CDN+NPM+3xui

安装3xui

不是本文的重点,见https://github.com/MHSanaei/3x-ui

直接命令行安装
bash <(curl -Ls https://raw.githubusercontent.com/MHSanaei/3x-ui/refs/tags/v2.5.8/install.sh)

cloudflare开启cdn

托管的cloudflare的域名,加个解析即可:

image-20250515104839-dbgl3oj

安装nginx proxy manager

安装docker和docker compose
#docker
apt-get update && apt-get install -y wget vim
wget -qO- get.docker.com | bash
docker -v
systemctl enable docker

#docker compose
apt-get install -y wget vim curl
apt-get install docker-compose
docker-compose -v
安装nginx proxy manager

新建一个文件夹nginx_proxy_manager,新建docker-compose.yml

version: '3'
services:
  app:
    image: 'chishin/nginx-proxy-manager-zh:release'
    restart: always
    network_mode: host  # 关键修改:使用主机网络模式
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

注:这里我改了网络模式,原来的模式会报错,宿主模式就不会报错了。

然后docker compose up -d,访问ipv6的81端口

默认管理员信息:

Email:    [email protected]
Password: changeme

进入界面后修改账号密码,然后新建一个代理服务,下面的2053是我的入站端口:

20250514224255

访问域名

现在使用域名直接访问就应该可以直接ipv4访问了:

image-20250515104943-axnmwus

入站:tcp/udp 的ipv6转ipv4

这里是我重点研究的地方:

非域名配置

首先,我们测试使用cf自动生成的域名来配置,重启后域名就会发生变化,虽然不长久,但可以用来测试。

这里参考自:https://linux.do/t/topic/431783

ipv6机器的配置

配置文件server.json

{
  "server": {
    "token": "quick",
    "edge-ips": [
      "198.41.192.77:7844",
      "198.41.197.78:7844",
      "198.41.202.79:7844",
      "198.41.207.80:7844",
      "[2606:4700:a0::1]:7844",
      "[2606:4700:a1::1]:7844",
      "[2606:4700:a8::1]:7844",
      "[2606:4700:a9::1]:7844"
    ]
  }
}

下载解压运行:

wget https://github.com/fmnx/cftun/releases/download/v2.0.3/cftun-linux-amd64.tar.gz
tar zxvf cftun-linux-amd64.tar.gz
./cftun-linux-amd64 -c server.json

启动后你应该能看到如下信息

./cftun-linux-amd64 -c server.json
INFO[2025-05-14T22:18:13.205853576-04:00] THE TEMPORARY DOMAIN YOU HAVE APPLIED FOR IS: crops-ban-r-coupons.trycloudflare.com 
2025-05-15T02:18:13Z INF Starting tunnel tunnelID=d818a586-3d8a-449f-8d97-177a16284812
2025-05-15T02:18:13Z INF Generated Connector ID: 4fcd66cf-4dc8-41ea-9c66-e2ae6b882e37
2025-05-15T02:18:13Z INF Initial protocol quic
2025-05-15T02:18:13Z INF Using [CurveID(4588) CurveID(25497) CurveP256] as curve preferences connIndex=0 event=0 ip=198.41.192.77
2025-05-15T02:18:13Z INF Registered tunnel connection connIndex=0 connection=3aec9142-8d43-429f-9a4b-c3077141a256 event=0 ip=198.41.192.77 location=hkg05 protocol=quic
2025-05-15T02:18:13Z INF Using [CurveID(4588) CurveID(25497) CurveP256] as curve preferences connIndex=1 event=0 ip=198.41.207.80
2025-05-15T02:18:14Z INF Registered tunnel connection connIndex=1 connection=911a4fc6-846d-4fb1-9df5-81ed62236a68 event=0 ip=198.41.207.80 location=hkg11 protocol=quic
2025-05-15T02:18:14Z INF Using [CurveID(4588) CurveID(25497) CurveP256] as curve preferences connIndex=2 event=0 ip=198.41.197.78
2025-05-15T02:18:15Z INF Registered tunnel connection connIndex=2 connection=a0a6da9e-561e-41a2-9cbf-8f2a4b09b351 event=0 ip=198.41.197.78 location=hkg05 protocol=quic
2025-05-15T02:18:15Z INF Using [CurveID(4588) CurveID(25497) CurveP256] as curve preferences connIndex=3 event=0 ip=198.41.202.79
2025-05-15T02:18:16Z INF Registered tunnel connection connIndex=3 connection=b7747757-07b9-47d8-8687-52fda5b70b6d event=0 ip=198.41.202.79 location=hkg12 protocol=quic

这里的crops-ban-r-coupons.trycloudflare.com即是临时域名。

ipv4的机器配置

配置文件:client.json

{
  "client": {
    "cdn-ip": "198.41.207.80", #这里可以是任意cdn ip
    "cdn-port": 80,   #如果80连不上,就改为443
    "scheme": "ws",   #改为443后这里要对应改为wss
    "global-url": "crops-ban-r-coupons.trycloudflare.com",
    "tunnels": [
      {
            "说明": "中转到warp",
        "listen": "127.0.0.1:2408",
        "remote": "162.159.192.1:2408",
        "protocol": "udp",
        "timeout": 30
      },
      {
            "说明": "中转到ssh",
        "listen": "127.0.0.1:2222",
        "remote": "127.0.0.1:22",
        "protocol": "tcp"
      },
      {
            "说明": "中转到iperf3-udp",
        "listen": "127.0.0.1:5201",
        "remote": "127.0.0.1:5201",
        "protocol": "udp",
        "timeout": 30
      },
      {
            "说明": "中转到iperf3-tcp",
        "listen": "127.0.0.1:5201",
        "remote": "127.0.0.1:5201",
        "protocol": "tcp"
      }
    ]
  }
}

下载、解压运行:

wget https://github.com/fmnx/cftun/releases/download/v2.0.3/cftun-linux-amd64.tar.gz
tar zxvf cftun-linux-amd64.tar.gz
./cftun-linux-amd64 -c client.json
ssh测试

现在尝试通过ipv4机器ssh ipv6机器:

ssh -vvv -p 2222 [email protected]
.... #出现一大堆忽略
[email protected]'s password:  #出现这个,输入密码能正常访问即为成功

现在tcp即正常被转发到了ipv6的机器上。

至于之后的转发,自行配置,本文不涉及任何搭建服务。

域名配置

临时域名终归是不长久的,人总会想转发到自己的域名上,下面我们进行域名的绑定,这样不会每次都刷一个新的临时域名了。

创建zero trust tunnel

进入cf,选择zero trust:

image-20250515110328-s0tsty0

然后:

image-20250515110500-ror0uif

然后选择cloudflared隧道:

image-20250515110536-zyy4zk1

命名后保存:

image-20250515110611-nyjvay5

然后,选择docker,复制命令下来,提取对应的token部分:

image-20250515143853-fngq2q2

server.json中修改Token的值:

{
  "server": {
    "token": "Your token",
    "edge-ips": [
      "198.41.192.77:7844",
      "198.41.197.78:7844",
      "198.41.202.79:7844",
      "198.41.207.80:7844",
      "[2606:4700:a0::1]:7844",
      "[2606:4700:a1::1]:7844",
      "[2606:4700:a8::1]:7844",
      "[2606:4700:a9::1]:7844"
    ]
  }
}

client.json中修改global-url

{
  "client": {
    "cdn-ip": "104.17.143.163",
    "cdn-port": 80,
    "scheme": "ws",
    "global-url": "tunnel.0vv0.de",
    "tunnels": [
      {                     
        "listen":  "0.0.0.0:port",   
        "remote":  "127.0.0.1:port",
        "protocol":"tcp"
      },
      {                       
        "listen":  "0.0.0.0:port",
        "remote":  "127.0.0.1:port",
        "protocol":"udp",
        "timeout": 30
      }
    ]
  }
}

重新测试后,就可以看到像我的截图中的连接成功了。

至于后面的如何通过访问ipv4->ipv6的协议,也就很简单了。

成功的截图

补一张通过本地ipv4单栈->香港的ipv4单栈机器->sakura ipv6 only->hkt访问ping0的截图:

image-20250515144431-1b0ludf

参考文献:

  1. https://linux.do/t/topic/431783/14
  2. https://www.nodeseek.com/post-54704-1
  3. https://linux.do/t/topic/3628

Related Post

发表回复