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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bruce_6/article/details/85337122

这里我们使用简单的 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

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

在 1 上通过 curl 访问

curl 10.144.85.73:80

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

# 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 上抓包来看,数据包发送出去了:

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 地址,配置如下:

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 上访问:

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

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

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

IPv4 代理 IPv6

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

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

机器 2 的 HAproxy 配置:

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、下一步需要部署真实服务再进行验证


公众号提供CSDN资源免费下载服务!

你的关注是对我最大的鼓励!

最近搜集到传智播客 2018 最新 Python 和 Java 教程!关注本公众号,后台回复「2018」即可获取下载地址

猜你喜欢

转载自blog.csdn.net/bruce_6/article/details/85337122