2017-07-25 48 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中删除它们后,一切按预期工作。

相关问题