Linux 命名空间问题

Linux 命名空间问题

我被网络命名空间问题困住了。我有一个设置命名空间的脚本。它在一台 Linux 机器上运行良好,但在另一台机器上却不行。

剧本:

function iface_up() {
  ip netns add riatans

  ip netns exec riatans ip addr add 127.0.0.1/8 dev lo
  ip netns exec riatans ip link set lo up

  ip link add riatavpn type veth peer name vpn1
  ip link set riatavpn up
  ip link set vpn1 netns riatans up

  ip addr add 10.211.211.1/24 dev riatavpn
  ip netns exec riatans ip addr add 10.211.211.2/24 dev vpn1
  ip netns exec riatans ip route add default via 10.211.211.1 dev vpn1

  iptables -t nat -A POSTROUTING -o $if_name -j MASQUERADE
  iptables -A FORWARD -i $if_name -o riatavpn -m state --state RELATED,ESTABLISHED -j ACCEPT
  iptables -A FORWARD -i riatavpn -o $if_name -j ACCEPT

  sysctl -q net.ipv4.ip_forward=1

  mkdir -p /etc/netns/riatans
  echo 'nameserver 8.8.8.8' > /etc/netns/riatans/resolv.conf

  ip netns exec riatans ping -c 1 www.google.com
}

在盒子上它可以工作。

# ip netns list
riatans (id: 0)
# ip netns exec riatans ping www.google.com
PING www.google.com (172.217.12.164) 56(84) bytes of data.
64 bytes from lga25s62-in-f4.1e100.net (172.217.12.164): icmp_seq=1 ttl=54 time=12.3 ms
# ip netns exec riatans traceroute www.google.com
traceroute to www.google.com (172.217.12.164), 30 hops max, 60 byte packets
 1  10.211.211.1 (10.211.211.1)  0.064 ms  0.019 ms  0.015 ms
 2  10.7.7.1 (10.7.7.1)  0.360 ms  0.506 ms  0.461 ms
# ip netns exec riatans ip route
default via 10.211.211.1 dev vpn1 
10.211.211.0/24 dev vpn1  proto kernel  scope link  src 10.211.211.2 

在不起作用的盒子上:

# ip netns list
riatans (id: 0)
# ip netns exec riatans ping www.google.com
PING www.google.com (172.217.7.4) 56(84) bytes of data.
64 bytes from lga25s56-in-f4.1e100.net (172.217.7.4): icmp_seq=1 ttl=54 time=36.3 ms
64 bytes from lga25s56-in-f4.1e100.net (172.217.7.4): icmp_seq=2 ttl=54 time=19.1 ms
^C
--- www.google.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 19.158/27.776/36.394/8.618 ms
# ip netns exec riatans traceroute www.google.com
traceroute to www.google.com (172.217.7.4), 30 hops max, 60 byte packets
 1  10.211.211.1 (10.211.211.1)  0.029 ms  0.008 ms  0.007 ms
 2  10.211.211.1 (10.211.211.1)  0.010 ms !X  0.008 ms !X  0.008 ms !X
# ip netns exec riatans ip route
default via 10.211.211.1 dev vpn1 
10.211.211.0/24 dev vpn1 proto kernel scope link src 10.211.211.2 

我应该提到,在命名空间之外的盒子 2 上,互联网工作正常。因此,虽然盒子 2 可以在命名空间内 ping www.google.com,但无法执行 traceroute、ssh 或 vpnc。

我遗漏了什么?为什么 traceroute 第二跳不是 10.7.7.1(我的路由器)?

谢谢你的帮助。

答案1

默认情况下,traceroute 使用 UDP 数据包,因此 ping 可以工作,但 traceroute 输出可能不同。

traceroute 输出中的from !Xthe 10.211.211.1host 表示 ICMPcommunication administrative prohibited应答。

这是防火墙问题。使用命令检查完整规则集iptables-save

配置网络命名空间的防火墙规则时,您会在链的底部添加规则。链顶部的规则可以阻止来自其他命名空间的 UDP 数据包。

相关内容