在docker容器中使用iptables进行端口转发
我在一个容器上运行两个服务(A和B)。一个服务模拟另一个服务所需的依赖项 服务A是一个黑匣子,呼叫IP 169.254.169.254。我想使用iptables将该呼叫转发到服务B 我这样启动容器,这样它就可以有自己的iptables在docker容器中使用iptables进行端口转发,docker,networking,port,ubuntu-16.04,iptables,Docker,Networking,Port,Ubuntu 16.04,Iptables,我在一个容器上运行两个服务(A和B)。一个服务模拟另一个服务所需的依赖项 服务A是一个黑匣子,呼叫IP 169.254.169.254。我想使用iptables将该呼叫转发到服务B 我这样启动容器,这样它就可以有自己的iptables docker run -it --cap-add=NET_ADMIN --sysctl net.ipv4.conf.eth0.route_localnet=1 <name> bash 但是,呼叫没有路由到127.0.0.1。如果在UbuntuXeni
docker run -it --cap-add=NET_ADMIN --sysctl net.ipv4.conf.eth0.route_localnet=1 <name> bash
但是,呼叫没有路由到127.0.0.1。如果在UbuntuXenial虚拟机中完成,同样的步骤也会起作用。您可以运行下面的
iptables -t nat -A OUTPUT -p tcp --dport 80 -d 169.254.169.254 -j DNAT --to-destination 127.0.0.1:8099
我用下面的代码对我的容器做了一个简单的测试,效果非常好
root@a09ced7f6961:/# iptables -t nat -A OUTPUT -p tcp --dport 8080 -d 123.45.67.89 -j DNAT --to-destination 127.0.0.1:80
root@a09ced7f6961:/# curl 123.45.67.89:8080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
root@a09ced7f6961:/#iptables-t nat-A OUTPUT-p tcp-dport 8080-d 123.45.67.89-j DNAT-to destination 127.0.0.1:80
root@a09ced7f6961:/#curl 123.45.67.89:8080
欢迎来到nginx!
我看到的唯一区别是使用输出链而不是预路由
。这是因为本地生成的数据包跳过了预路由吗?我在某个地方读到过。@bgfvdu3w,我不是这方面的专家,我只是尝试了不同的东西,看到了效果
root@a09ced7f6961:/# iptables -t nat -A OUTPUT -p tcp --dport 8080 -d 123.45.67.89 -j DNAT --to-destination 127.0.0.1:80
root@a09ced7f6961:/# curl 123.45.67.89:8080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>