我有一个监听 ICMP ping 数据包(包含数据有效负载)的脚本,虽然从命令行运行它可以工作,但它在 Docker 容器中不起作用,因为 ICMP ping 数据包不是从服务器实例路由的到容器。
它在 AWS 容器服务上运行,这使事情稍微复杂化。
我认为这将转发所有数据包
sudo iptables -t nat -A POSTROUTING --out-interface veth* -j MASQUERADE
sudo iptables -A FORWARD --in-interface eth1 -j ACCEPT
如何将到达实例的“eth0”接口的 ICMP ping(“echo”)数据包专门转发到 docker 容器的本地 IP 或虚拟接口(例如 172.0.0.1 或 veth*)。
答案1
诺欧
您不想阻止主机处理所有 ICMP 数据包。
(我认为你想为容器分配一个真实的IP地址。
可能最简单的是使用 macvlan - 考虑到您还没有在 eth0 上使用桥接。您创建一个附加到 eth0 的 macvlan 并将其分配给容器。有一个名为 pipelinework 的脚本每个人都在使用,直到 Docker 解决了本机网络支持问题。还有 ipvlan(较新),以防您的网络不允许分配额外的 MAC 地址。 macvlan 的好处是它可以与 DHCP4 一起正常工作)。