从远程机器 ping 命名空间中的服务器

从远程机器 ping 命名空间中的服务器

如果我在SERVER机器的默认命名空间中运行 Web 服务器,我可以curlREMOTE机器上执行此操作:

curl http://SERVER:80/

现在我将 Web 服务器放入命名空间中nested,并提供veth对等的nested's网络接口:

sudo ip link add veth type veth peer name vpeer
sudo ip link set vpeer netns nested
sudo ip addr add 192.168.3.77/24 dev veth
sudo ip link set veth up
sudo ip netns exec nested ip addr add 192.168.3.78/24 dev vpeer
sudo ip netns exec nested ip link set vpeer up
sudo ip netns exec nested ip route add default via 192.168.3.77

所以我可以从默认命名空间 ping 它:

curl --interface veth 192.168.3.78:80/

我的问题:如何nested从远程机器 ping 命名空间中的 Web 服务器?似乎curl http://SERVER:80/变成了lo接口。我可以将外部请求指向veth接口吗?或者如何配置配对?

答案1

  1. 远程主机必须具有到嵌套命名空间 IP 地址 ( ) 的路由192.168.3.78。路由设置取决于许多因素。
  2. 应该在默认命名空间中启用 ip 转发(sysctl 变量net.ipv4.ip_forward应该是1)。
  3. 防火墙应允许在veth和 LAN 接口之间转发数据包。结果,您应该可以在远程主机和嵌套命名空间之间成功 ping。
  4. 如果SERVER域名指向本地 IP 地址之一,则应使用DNAT目标将请求重定向到网络命名空间:
iptables -t nat -I PREROUTING -p tcp --dport 80 --dst <orig-ip> -j DNAT --to 192.168.3.78
iptables -t nat -I OUTPUT -p tcp --dport 80 --dst <orig-ip> -j DNAT --to 192.168.3.78
  1. 使用 tcpdump 来解决问题。

相关内容