不用warp让纯IPv6服务器支持IPv4
本站跑在Scaleway的纯IPv6服务器上,之前为了给它加上IPv4,用了Cloudflare warp脚本。
不知道从什么时候开始,服务器就开始经常掉线、失联,也查不出什么问题。后来,换了个脚本,服务器倒是不失联了,但就是连不上,表现为明明已经获得了IP,但就是不走warp线路。
所以,我决定索性不弄什么一键warp了。借用Cloudflare补全IPv4就行,何必非得用warp呢?wireguard也不要了。
简单来说,新方案是在worker上部署一个vless服务,然后让IPv4走socks代理,IPv6不走代理。
配置代理
先找到另一台双栈服务器搭建服务,然后在本地创建socks5代理。
这里有个现成的在Cloudflare worker上部署vless的方案。
在Cloudflare面板里创建一个worker,然后把这个代码粘贴进去。
Cloudflare屏蔽vless
关键词,现将它全局替换成其他词,然后把userID
改为自己的UUID。
这就已经部署完了,不清楚vless配置的话访问 https://【your_domain】.workers.dev/【userID】
还有一点可修可不修的毛病,由于Worker无法访问已经套了Cloudflare CDN的网站,如果配置了socks5Address
,就会改走socks5代理。
如果没条件自己搭建socks5代理,或者不在意安全性,可以用这个修改版,里面内置了代理IP。
甚至也可以不配置,只是一些网站不能访问。
如果要自己配置,就找一台IPv4服务器,用glider配置socks5,例如:
./glider -listen user:pass@[::]:5005
然后将 socks5Address
设定为user:pass@【yourServer】:5005
由于我的VPS在境外可直连Worker,所以没有绑定域名。
在服务器上用glider测试一下:
./glider -listen=127.0.0.1:14159 -forward=wss://【your_domain】.workers.dev/?ed=2048,vless://【userID】@
curl -4 -x socks5h://127.0.0.1:14159 https://google.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 restart enable
设置IPv4转发
安装:apt install iproute2 iptables
# 启用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 # 确保IPv6使用本地默认路由 # ip6tables -t nat -F # 如果 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
试试,应该有结果了。
如果成功,将转发脚本加入开机启动了。
总结
本文提供了一种用redsocks搭配iptables,为纯IPv6服务器添加访问IPv4能力的方案。
好处是灵活、稳定,自有双栈服务器的话,也可以不依赖Cloudflare。
缺点是无法使用ping,或许可以通过tun2socks解决,但我没有这方面的需求,也就不再深究了。