Network-Namespace

從遠端機器 ping 命名空間中的伺服器

  • August 9, 2019

如果我在機器的預設命名空間中執行 Web 伺服器,SERVER我可以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. 遠端主機必須具有到嵌套命名空間 ip 地址 ( 192.168.3.78) 的路由。路由設置取決於許多因素。
  2. 應在預設命名空間中啟用 ip 轉發(sysctl 變數net.ipv4.ip_forward應為1)。
  3. veth防火牆應該允許在和 lan 介面之間轉發的數據包。結果,您應該在遠端主機和嵌套命名空間之間成功 ping。
  4. 如果SERVER域名指向本地 IP 地址之一,您應該使用DNAT目標將請求重定向到 netsted 命名空間:
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 解決問題。

引用自:https://serverfault.com/questions/978621