2017-07-25 55 views
1

我最初正在做一些與Docker橋接網絡組合,並且注意到代替白名單本地IP,請求總是從網關IP發送。爲什麼我在Docker橋接網絡中將網關IP作爲源地址?

要以最小的努力重現它,我用了兩個Python容器運行一個HTTP服務器和客戶端:

docker run -it --rm python:alpine sh

在服務器端:

python -m http.server 

在客戶端:

wget 172.17.0.3:8000 

預期輸出,是請求來自容器IP:

Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...   
172.17.0.2 - - [time] "GET/HTTP/1.1" 200 - 

實際產量,其中請求來自橋網關IP:

Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...   
172.17.0.1 - - [time] "GET/HTTP/1.1" 200 - 

然而,當我跑我的筆記本電腦相同的測試,我得到預期的行爲(容器IP)。這個問題似乎只發生在我的服務器上。

什麼會導致這種行爲?是某種sysctl或iptables的問題?

回答

1

我找到了原因,這是一個古老的iptables-save條目。很難注意到,默認情況下,iptables -nvL不顯示NAT規則。

/etc/iptables/rules.v4中刪除它們後,一切按預期工作。

相關問題