1. 程式人生 > >HAproxy配置IPv6和IPv4的互相代理實驗

HAproxy配置IPv6和IPv4的互相代理實驗

這裡我們使用簡單的 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」即可獲取下載地址