马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
假如网络定名空间和宿主机的 IP 地点不在同一网段,它们之间仍然可以通过设置得当的路由举行通讯。
关键是须要确保宿主机和网络定名空间之间有得当的路由规则,而且可以举行地点转换。
你可以使用 NAT(网络地点转换) 或 路由 来实现这种跨网段的通讯。
情形假设:
宿主机的物理网卡 eth0 IP 地点 192.168.33.180
宿主机的 IP 地点为 10.0.0.1/24(宿主机的接口 veth0)。
网络定名空间的 IP 地点为 10.0.0.20/24(网络定名空间的接口是 veth1)。
步调 1:创建 net 定名空间和接口对
创建 veth peer 接口对
- ip link add veth0 type veth peer name veth1
复制代码 将 veth1 移动到名为 ns1 的网络定名空间
- ip link set veth1 netns ns1
复制代码 步调 2:设置 IP 地点
分别为宿主机和网络定名空间设置 IP 地点(假设宿主机和定名空间的 IP 地点不在同一网段):
设置宿主机接口(veth0):
- ip addr add 10.0.0.1/24 dev veth0
- ip link set veth0 up
复制代码 设置网络定名空间接口(veth1):
- ip netns exec ns1 ip addr add 10.0.0.15/24 dev veth1
- ip netns exec ns1 ip link set veth1 up
复制代码 步调 3:设置宿主机 iptables 转发规则
由于宿主机和网络定名空间的 IP 地点不在同一网段,我们须要设置NAT让网络定名空间可上网。
为宿主机启用 IP 转发(允许转发流量):
- echo 1 > /proc/sys/net/ipv4/ip_forward
复制代码 设置宿主机的iptables规则:
- s:/ # iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
复制代码 上述下令的作用是,将全部从 10.0.0.0/24 网段发出的流量转换为宿主机 eth0 接口的外部 IP 地点。
验证设置内容。
- s:/ # iptables -t nat -vnL
- Chain PREROUTING (policy ACCEPT 528 packets, 114K bytes)
- pkts bytes target prot opt in out source destination
- 1054 225K oem_nat_pre all -- * * 0.0.0.0/0 0.0.0.0/0
- Chain INPUT (policy ACCEPT 417 packets, 106K bytes)
- pkts bytes target prot opt in out source destination
- Chain OUTPUT (policy ACCEPT 60 packets, 16483 bytes)
- pkts bytes target prot opt in out source destination
- Chain POSTROUTING (policy ACCEPT 63 packets, 17955 bytes)
- pkts bytes target prot opt in out source destination
- 142 33637 tetherctrl_nat_POSTROUTING all -- * * 0.0.0.0/0 0.0.0.0/0
- 5 420 MASQUERADE all -- * eth0 10.0.0.0/24 0.0.0.0/0
- 6 504 MASQUERADE all -- * eth0 10.10.0.0/16 0.0.0.0/0
- Chain oem_nat_pre (1 references)
- pkts bytes target prot opt in out source destination
- Chain tetherctrl_nat_POSTROUTING (1 references)
- pkts bytes target prot opt in out source destination
复制代码 步调 4:设置定名空间参数
设置定名空间 veth1 的ip地点
- ip netns exec ns1 ip addr add 10.0.0.15/24 dev veth1
- ip link set veth1 up
复制代码 设置ip地点并拉起网卡;
设置定名空间 路由规则
- ip netns exec ns1 ip rout add default via 10.0.0.1
复制代码 查察路由设置结果
- kona:/ # ip netns exec ns1 ip rout ls
- default via 10.0.0.1 dev veth1
- default via 10.10.0.1 dev wlan1 metric 100
- 10.0.0.0/24 dev veth1 proto kernel scope link src 10.0.0.15
- 10.10.0.0/16 dev wlan1 proto kernel scope link src 10.10.0.15
复制代码 设置定名空间 NAT 规则
- ip netns exec ns1 iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o veth1 -j MASQUERADE
复制代码 查察 iptablse 规则
- kona:/ # ip netns exec ns1 iptables -t nat -nvL
- Chain PREROUTING (policy ACCEPT 100 packets, 26969 bytes)
- pkts bytes target prot opt in out source destination
- Chain INPUT (policy ACCEPT 1 packets, 84 bytes)
- pkts bytes target prot opt in out source destination
- Chain OUTPUT (policy ACCEPT 14 packets, 1176 bytes)
- pkts bytes target prot opt in out source destination
- Chain POSTROUTING (policy ACCEPT 7 packets, 588 bytes)
- pkts bytes target prot opt in out source destination
- 8 672 MASQUERADE all -- * veth1 10.0.0.0/24 0.0.0.0/0
- 0 0 MASQUERADE all -- * * 10.0.0.0/24 0.0.0.0/0
复制代码 步调 5:验证通讯
宿主机与网络定名空间的通讯:
在宿主机上使用 ping 测试与网络定名空间的毗连:
- kona:/ # ping 10.0.0.15
- PING 10.0.0.15 (10.0.0.15) 56(84) bytes of data.
- 64 bytes from 10.0.0.15: icmp_seq=1 ttl=64 time=0.201 ms
- 64 bytes from 10.0.0.15: icmp_seq=2 ttl=64 time=0.245 ms
- 64 bytes from 10.0.0.15: icmp_seq=3 ttl=64 time=0.244 ms
复制代码 网络定名空间上网通讯:
- ip netns exec ns1 ping -I 10.0.0.15 www.bing.com
- PING china.bing123.com (202.89.233.101) from 10.0.0.15 : 56(84) bytes of data.
- 64 bytes from 202.89.233.101: icmp_seq=1 ttl=116 time=4.49 ms
- 64 bytes from 202.89.233.101: icmp_seq=2 ttl=116 time=9.55 ms
- 64 bytes from 202.89.233.101: icmp_seq=3 ttl=116 time=4.83 ms
复制代码 步调 6:把 veth1 创建到容器网络定名空间
获取容器的定名空间
- kona:/ # docker inspect con6|grep id
- "Pid": 13455,
- kona:/ # mkdir -p /var/run/netns/13455
- kona:/ # ln -s /proc/13455/ns/net /var/run/netns/13455
- kona:/ # nsenter -t 13455 -n ip addr
- 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
- link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
- inet 127.0.0.1/8 scope host lo
- valid_lft forever preferred_lft forever
- inet6 ::1/128 scope host
- valid_lft forever preferred_lft forever
- 2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
- link/ipip 0.0.0.0 brd 0.0.0.0
- 3:
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金 |