【容器网络定名空间】容器网络定名空间中创建双网卡

[复制链接]
发表于 2025-12-23 17:18:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
假如网络定名空间和宿主机的 IP 地点不在同一网段,它们之间仍然可以通过设置得当的路由举行通讯。
关键是须要确保宿主机和网络定名空间之间有得当的路由规则,而且可以举行地点转换。
你可以使用 NAT(网络地点转换) 或 路由 来实现这种跨网段的通讯。
情形假设:
宿主机的物理网卡 eth0 IP 地点 192.168.33.180
宿主机的 IP 地点为 10.0.0.1/24(宿主机的接口 veth0)。
网络定名空间的 IP 地点为 10.0.0.20/24(网络定名空间的接口是 veth1)。
步调 1:创建 net 定名空间和接口对
  1. ip netns add ns1
复制代码
创建 veth peer 接口对

  1. ip link add veth0 type veth peer name veth1
复制代码
将 veth1 移动到名为 ns1 的网络定名空间

  1. ip link set veth1 netns ns1
复制代码
步调 2:设置 IP 地点
分别为宿主机和网络定名空间设置 IP 地点(假设宿主机和定名空间的 IP 地点不在同一网段):
设置宿主机接口(veth0):
  1. ip addr add 10.0.0.1/24 dev veth0
  2. ip link set veth0 up
复制代码
设置网络定名空间接口(veth1):
  1. ip netns exec ns1 ip addr add 10.0.0.15/24 dev veth1
  2. ip netns exec ns1 ip link set veth1 up
复制代码
步调 3:设置宿主机 iptables 转发规则
由于宿主机和网络定名空间的 IP 地点不在同一网段,我们须要设置NAT让网络定名空间可上网。
为宿主机启用 IP 转发(允许转发流量):
  1. echo 1 > /proc/sys/net/ipv4/ip_forward
复制代码
设置宿主机的iptables规则:
  1. s:/ # iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
复制代码
上述下令的作用是,将全部从 10.0.0.0/24 网段发出的流量转换为宿主机 eth0 接口的外部 IP 地点。
验证设置内容。
  1. s:/ # iptables -t nat -vnL
  2. Chain PREROUTING (policy ACCEPT 528 packets, 114K bytes)
  3. pkts bytes target     prot opt in     out     source               destination         
  4. 1054  225K oem_nat_pre  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
  5. Chain INPUT (policy ACCEPT 417 packets, 106K bytes)
  6. pkts bytes target     prot opt in     out     source               destination         
  7. Chain OUTPUT (policy ACCEPT 60 packets, 16483 bytes)
  8. pkts bytes target     prot opt in     out     source               destination         
  9. Chain POSTROUTING (policy ACCEPT 63 packets, 17955 bytes)
  10. pkts bytes target     prot opt in     out     source               destination         
  11.   142 33637 tetherctrl_nat_POSTROUTING  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
  12.     5   420 MASQUERADE  all  --  *      eth0    10.0.0.0/24          0.0.0.0/0           
  13.     6   504 MASQUERADE  all  --  *      eth0    10.10.0.0/16         0.0.0.0/0           
  14. Chain oem_nat_pre (1 references)
  15. pkts bytes target     prot opt in     out     source               destination         
  16. Chain tetherctrl_nat_POSTROUTING (1 references)
  17. pkts bytes target     prot opt in     out     source               destination         
复制代码
步调 4:设置定名空间参数
设置定名空间 veth1 的ip地点

  1. ip netns exec ns1 ip addr add 10.0.0.15/24 dev veth1
  2. ip link set veth1 up
复制代码
设置ip地点并拉起网卡;
设置定名空间 路由规则

  1. ip netns exec ns1 ip rout add default via 10.0.0.1
复制代码
查察路由设置结果
  1. kona:/ # ip netns exec ns1 ip rout ls
  2. default via 10.0.0.1 dev veth1
  3. default via 10.10.0.1 dev wlan1 metric 100
  4. 10.0.0.0/24 dev veth1 proto kernel scope link src 10.0.0.15
  5. 10.10.0.0/16 dev wlan1 proto kernel scope link src 10.10.0.15
复制代码
设置定名空间 NAT 规则

  1. ip netns exec ns1 iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o veth1 -j MASQUERADE
复制代码
查察 iptablse 规则
  1. kona:/ # ip netns exec ns1 iptables -t nat -nvL
  2. Chain PREROUTING (policy ACCEPT 100 packets, 26969 bytes)
  3. pkts bytes target     prot opt in     out     source               destination         
  4. Chain INPUT (policy ACCEPT 1 packets, 84 bytes)
  5. pkts bytes target     prot opt in     out     source               destination         
  6. Chain OUTPUT (policy ACCEPT 14 packets, 1176 bytes)
  7. pkts bytes target     prot opt in     out     source               destination         
  8. Chain POSTROUTING (policy ACCEPT 7 packets, 588 bytes)
  9. pkts bytes target     prot opt in     out     source               destination         
  10.     8   672 MASQUERADE  all  --  *      veth1   10.0.0.0/24          0.0.0.0/0           
  11.     0     0 MASQUERADE  all  --  *      *       10.0.0.0/24          0.0.0.0/0         
复制代码
步调 5:验证通讯
宿主机与网络定名空间的通讯:
在宿主机上使用 ping 测试与网络定名空间的毗连:
  1. kona:/ # ping 10.0.0.15                                                                                                                                                            
  2. PING 10.0.0.15 (10.0.0.15) 56(84) bytes of data.
  3. 64 bytes from 10.0.0.15: icmp_seq=1 ttl=64 time=0.201 ms
  4. 64 bytes from 10.0.0.15: icmp_seq=2 ttl=64 time=0.245 ms
  5. 64 bytes from 10.0.0.15: icmp_seq=3 ttl=64 time=0.244 ms
复制代码
网络定名空间上网通讯:
  1. ip netns exec ns1 ping -I 10.0.0.15 www.bing.com
  2. PING china.bing123.com (202.89.233.101) from 10.0.0.15 : 56(84) bytes of data.
  3. 64 bytes from 202.89.233.101: icmp_seq=1 ttl=116 time=4.49 ms
  4. 64 bytes from 202.89.233.101: icmp_seq=2 ttl=116 time=9.55 ms
  5. 64 bytes from 202.89.233.101: icmp_seq=3 ttl=116 time=4.83 ms
复制代码
步调 6:把 veth1 创建到容器网络定名空间
获取容器的定名空间

  1. kona:/ # docker inspect con6|grep id
  2.             "Pid": 13455,
  3. kona:/ # mkdir -p /var/run/netns/13455
  4. kona:/ # ln -s /proc/13455/ns/net /var/run/netns/13455
  5. kona:/ # nsenter -t 13455 -n ip addr
  6. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
  7.     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  8.     inet 127.0.0.1/8 scope host lo
  9.        valid_lft forever preferred_lft forever
  10.     inet6 ::1/128 scope host
  11.        valid_lft forever preferred_lft forever
  12. 2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
  13.     link/ipip 0.0.0.0 brd 0.0.0.0
  14. 3:
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表