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」即可獲取下載地址