内网穿透的软件有太多了,具体参见我整理的NAS私有云、穿透导航网站。
都需要一台公网上的独立服务器,穿透服务商除外。
目前随着IPv6的大规模普及,服务器和PC基本都有IPv6地址了。
所以这里换了一种玩法,即服务器仅做转发以及负载均衡的处理。
好处:1. 数据会经过iptables防火墙过滤 。 不像frp穿透后直接回环地址。转发服务器相当于第一层攻击过滤器。
2. 可以多个设备服务同时用,做负载均衡
3. 框架结构更简单
首先服务器开通双栈模式,这样无论普通用户(IPv4或者IPv6)是什么样的情况,都可以访问得到。 而我们的转发服务器将内容通过IPv6连接转发到拥有IPv6地址的内网真实服务器上(IPv4自动封包)。
示意图如下:
这么做解决了什么问题?
解决了计算量大,结果少的费用问题。
比如玩神经网络stable diffusion AI绘画,然后加载了一大堆插件lora什么的。 这时候个人用户如果想提供实时在线图片生成服务,租用服务器大概几万到几十万的费用,显然太不划算。或者训练Chatgpt等,这类情况计算量大,结果很少,占用带宽很低,非常划算。
当然,用来提供web服务,搭建博客也是没问题的。
小疑问:FRP、Ngrok穿透也能做到呀,而且还能解决服务器在局域网的问题,但使用Haproxy 或Nginx 做不到。还不如用socat 一类的转发工具呢,一条命令解决连配置都省了。首先Haproxy可以透传客户端IP,其次负载均衡很牛逼,这两个功能是目前的穿透软件所不具备的。 同时使用最好,但复杂度较高,相较之下,砍掉穿透吧,毕竟IPv6可以解决。
以80端口转发到180端口为例,HaProxy的配置文件如下:
resolvers dns1
nameserver internal-dns dns25.hichina.com:53 # 由于域名在阿里云上,所以这里使用阿里云的DNS服务器,
resolve_retries 3
timeout resolve 10s
timeout retry 10s
hold other 30s
hold refused 30s
hold nx 30s
hold timeout 30s
hold valid 10s
hold obsolete 30s
listen web
bind 0.0.0.0:80,[::]:80 # 以80端口为例
mode tcp
option forwardfor
# 这里仅适用ipv6,所以末尾 添加 resolve-prefer ipv6 的选项
# 域名替换为自己的域名及端口; 并且这里可以添加多个服务器,每行一个。
server web1 test6.rangotec.com:180 send-proxy check inter 3000 fall 3 rise 5 resolvers dns1 resolve-prefer ipv6
客户端Nginx配置如下:
server {
listen [::]:180 proxy_protocol;
# 其他 略......
}
其中haproxy 使用域名做服务是因为分配到的IPv6通常为动态IP。 至于DDNS动态更新IP的方法,参考 自建NAS,动态IPv6,DDNS解决方案。