使用HaProxy负载均衡做内网穿透(转发)

内网穿透的软件有太多了,具体参见我整理的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解决方案

评论列表: