Network-Namespace
從遠端機器 ping 命名空間中的伺服器
如果我在機器的預設命名空間中執行 Web 伺服器,
SERVER
我可以curl
從REMOTE
機器上執行它: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
介面或如何配置配對?
- 遠端主機必須具有到嵌套命名空間 ip 地址 (
192.168.3.78
) 的路由。路由設置取決於許多因素。- 應在預設命名空間中啟用 ip 轉發(sysctl 變數
net.ipv4.ip_forward
應為1
)。veth
防火牆應該允許在和 lan 介面之間轉發的數據包。結果,您應該在遠端主機和嵌套命名空間之間成功 ping。- 如果
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
- 使用 tcpdump 解決問題。