不用warp让纯IPv6服务器支持IPv4
本站跑在Scaleway的纯IPv6服务器上,之前为了给它加上IPv4,用了Cloudflare warp脚本。
不知道从什么时候开始,服务器就开始经常掉线、失联,也查不出什么问题。后来,换了个脚本,服务器倒是不失联了,但就是连不上,表现为明明已经获得了IP,但不走warp线路。
所以,我决定索性放弃一键warp,只借用Cloudflare补全IPv4就行。
简单来说,新方案是在worker上部署一个vless服务,然后让IPv4走socks代理,IPv6不走代理。
配置代理
先找到另一台双栈服务器搭建服务,然后在本地创建socks5代理。
这里有个现成的在Cloudflare worker上部署vless的方案。
在Cloudflare面板里创建一个worker,然后把这个代码粘贴进去。
Cloudflare屏蔽vless
关键词,现将它全局替换成其他词,然后把userID
改为自己的UUID。
这就已经部署完了,不清楚vless配置的话访问 https://【your_domain】.workers.dev/【UUID】
一点小毛病
Worker无法访问已经套了Cloudflare CDN的网站。如果配置了socks5Address
,就会改走socks5代理。没条件自己搭建socks5代理,或者不在意安全性,可以用这个修改版,里面内置了代理IP。
甚至也可以不配置,只是一些网站不能访问。
现在已经可以跳到下一个步骤——测试连通性。
如果一定要完全访问,且在意安全性,这里有两个方案。
【方案1:自有服务器搭建socks5】
找一台IPv4服务器,用glider配置socks5,例如:
./glider -listen user:pass@[::]:5005
然后将 socks5Address
设定为user:pass@【yourServer】:5005
【方案2:无自有服务器建立代理链】
使用任意支持IPv4的代理服务,用CloudFlare作为跳板,承接所有流量。
例如:在HuggingFace Space上建立一个vless服务(复制别人的项目作为参考)
本地连接命令形如:./glider -listen :14159 -forward=wss://【CF-sub】.workers.dev,vless://【CF-UUID】@,wss://【HF-sub】.hf.space,vless://【HF-UUID】@
此时,CloudFlare仅用于桥接用途。
测试代理连通性
由于我的VPS可以直连Worker,所以没有绑定域名。
在服务器上用glider测试一下IPv4连接:
./glider -listen=127.0.0.1:14159 -forward=wss://【your_domain】.workers.dev/?ed=2048,vless://【userID】@
# 有结果,代表CF代理正常。 curl -4 -x socks5h://127.0.0.1:14159 https://google.com # 有结果,代表可访问CF CDN网站(非必要) curl -4 -x socks5h://127.0.0.1:14159 https://stackoverflow.com
配置redsocks
安装:apt install redsocks
socks5代理将运行在14159端口,对应的/etc/redsocks.conf
配置如下:
base { log_debug = off; log_info = off; daemon = on; redirector = iptables; } redsocks { local_ip = 127.0.0.1; local_port = 12345; ip = 127.0.0.1; port = 14159; type = socks5; }
# 启动redsocks systemctl restart redsocks systemctl enable redsocks
设置IPv4转发
# 启用IP转发 sysctl -w net.ipv4.ip_forward=1 # 配置规则 iptables -t nat -N REDSOCKS iptables -t nat -A REDSOCKS -p tcp -d 0.0.0.0/8 -j RETURN iptables -t nat -A REDSOCKS -p tcp -d 10.0.0.0/8 -j RETURN iptables -t nat -A REDSOCKS -p tcp -d 127.0.0.0/8 -j RETURN iptables -t nat -A REDSOCKS -p tcp -d 169.254.0.0/16 -j RETURN iptables -t nat -A REDSOCKS -p tcp -d 172.16.0.0/12 -j RETURN iptables -t nat -A REDSOCKS -p tcp -d 192.168.0.0/16 -j RETURN iptables -t nat -A REDSOCKS -p tcp -d 224.0.0.0/4 -j RETURN iptables -t nat -A REDSOCKS -p tcp -d 240.0.0.0/4 -j RETURN iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports 12345 iptables -t nat -A OUTPUT -p tcp -d 0.0.0.0/0 -j REDSOCKS # 如果 ip -4 route 结果为空,则需要 # 添加虚拟网关 ip addr add 192.0.2.1/24 dev lo ip route add default via 192.0.2.1 dev lo
curl -4 google.com
试试,应该有结果了。
如果成功,将转发脚本加入开机启动。
顺便解决一下ping问题
由于ping
是无法通过socks5代理的,可以用tcping
作为替代。
wget -c https://github.com/cloverstd/tcping/releases/download/v0.1.1/tcping-linux-amd64-v0.1.1.tar.gz tar -xf tcping-*.tar.gz && rm tcping-*.tar.gz chmod +x tcping && mv tcping /usr/bin echo "alias ping=tcping" >> ~/.bashrc
至此,tcping
完全取代了ping
。
总结
本文提供了一种用redsocks搭配iptables,为纯IPv6服务器添加访问IPv4能力的方案。
好处是灵活、稳定,自有双栈服务器的话,也可以不依赖Cloudflare。