HAproxy配置IPv6和IPv4的互相代理实验

RT

这里我们使用简单的 httpd 服务进行测试。

实验环境

序号 IPv4地址 IPv6地址
1 10.144.91.124 fd88:5110:a240::886:f250
2 10.144.91.125 fd88:5110:a240::886:f251
3 10.144.85.73 fd88:5110:a240::886:f252

测试IPv6访问

在机器 3 上安装 httpd,配置监听 IPv4 和 IPv6 的 80 端口。

文件:/etc/httpd/conf/httpd.conf

1
2
Listen 10.144.85.73:80
Listen [fd88:5110:a240::886:f252]:80

在 1 上通过 curl 访问

1
curl 10.144.85.73:80

IPv4 可以正常访问,返回数据较长,这里不再展示。

1
2
# curl -g [fd88:5110:a240::886:f252]:80
curl: (7) Failed connect to fd88:5110:a240::886:f252:80; Connection refused

IPv6 地址无法访问到 httpd 服务。IPv6 访问不稳定,有时可以正常返回数据。

机器 1 上抓包来看,数据包发送出去了:

1
2
3
4
5
6
23:42:52.924028 IP6 epic1.52564 > fd88:5110:a240::886:f252.http: Flags [S], seq 480439591, win 28800, options [mss 1440,sackOK,TS val 17786404 ecr 0,nop,wscale 7], length 0
23:42:52.924033 ethertype IPv6, IP6 epic1.52564 > fd88:5110:a240::886:f252.http: Flags [S], seq 480439591, win 28800, options [mss 1440,sackOK,TS val 17786404 ecr 0,nop,wscale 7], length 0
23:42:52.924035 ethertype IPv6, IP6 epic1.52564 > fd88:5110:a240::886:f252.http: Flags [S], seq 480439591, win 28800, options [mss 1440,sackOK,TS val 17786404 ecr 0,nop,wscale 7], length 0
23:42:52.937267 ethertype IPv6, IP6 fd88:5110:a240::886:f252.http > epic1.52564: Flags [R.], seq 0, ack 480439592, win 0, length 0
23:42:52.937270 ethertype IPv6, IP6 fd88:5110:a240::886:f252.http > epic1.52564: Flags [R.], seq 0, ack 1, win 0, length 0
23:42:52.937271 IP6 fd88:5110:a240::886:f252.http > epic1.52564: Flags [R.], seq 0, ack 1, win 0, length 0

此时机器 3 上抓不到包。

HAproxy 代理测试

在机器 1 上安装 HAproxy。

IPv6 代理 IPv4

我们配置 机器 1 的 IPv6 地址来代理 机器 3 的 IPv4 地址,配置如下:

1
2
3
4
5
6
7
8
listen httpd6
bind fd88:5110:a240::886:f250:8080
balance roundrobin
option httplog
option tcpka
option httpchk
option tcplog
server http1 10.144.85.73:80 check inter 5000 rise 2 fall 3

另外,配置了 HAproxy 的管理页面,这里不再赘述。

理论上,可以在浏览器中输入 http://[fd88:5110:a240::886:f250]:8080/,来测试。

由于公司环境,VPN 没有代理 IPv6 地址,所以只能通过 curl 的方式测试。

在机器 3 上访问:

1
curl -g [fd88:5110:a240::886:f250]:8080

数据可以正常返回,返回用时不稳定,大部分情况下返回结果用时很长,用时近 15s。也有访问无返回的情况。

通过 机器 2 访问时,一切正常!返回速度也很快!

IPv4 代理 IPv6

现在机器 3 的 httpd 服务无法通过 IPv6 正常访问,我们只能采用迂回的方式来做这个测试了。

既然,在机器 2 上可以通过 IPv6 访问 HAproxy 代理的服务,那我们在机器 2 上再做一层 HAproxy。

机器 2 的 HAproxy 配置:

1
2
3
4
5
6
7
8
listen httpd4
bind 0.0.0.0:18080
balance roundrobin
option httplog
option tcpka
option httpchk
option tcplog
server http1 fd88:5110:a240::886:f250:8080 check inter 5000 rise 2 fall 3

这里的后端 http1 的地址使用的是机器 2 上的 HAproxy 的对外地址。

这里,可以通过浏览器访问 http://10.144.91.125:18080/

正常访问

结论

1、通过 HAproxy 可以实现 IPv4 代理 IPv6,IPv6 代理 IPv4
2、地址转换时感觉还是有些问题,不确定是否是 httpd 服务的问题还是机器;
3、下一步需要部署真实服务再进行验证

hoxis wechat
一个脱离了高级趣味的程序员,关注回复1024有惊喜~
赞赏一杯咖啡
  • 本文作者: hoxis | 微信公众号【不正经程序员】
  • 本文链接: https://hoxis.github.io/ipv6-haproxy-ipv4.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!
  • 并保留本声明和上方二维码。感谢您的阅读和支持!
0%