在docker中如果想要让两个空间互通的话,可以有如下操作
空间名 | ip |
namespaceA | 10.1.1.1/24 |
namespace | 20.1.1.1/24 |
物理机 两块网卡IP :10.1.1.1 20.1.1.1
创键两个命名空间 namespaceA namespaceB
ip netns add namespaceA
ip netns add namespaceB
先创建一对网卡 让空间namespaceA与物理机相连
ip link add veth0 type veth peer name veth1
ip link set veth1 netns namespaceA
给空间1的网卡配置IP 和网关
ip netns exec namespaceA ifconfig veth1 10.1.1.2/24 up
ip netns exec namespaceA route add default gataway 10.1.1.1
查看空间1网卡的信息
[root@localhost ~]# ip netns exec namespaceA ip a
1: lo: mtu 65536 qdisc noop state DOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
6: veth1@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 36:9e:44:8e:15:25 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 10.1.1.2/24 brd 10.1.1.255 scope global veth1
valid_lft forever preferred_lft forever
inet6 fe80::349e:44ff:fe8e:1525/64 scope link
valid_lft forever preferred_lft forever
在物理机上配置与空间1 相连的网卡ip
ifconfig veth0 10.1.1.1/24 up
在空间1上ping物理机测试是否能ping通
ip netns exec namespaceA ping 10.1.1.1
空间2上面的配置和空间1相似
ip link add veth2 type veth peer name veth3
ip link set veth3 netns namespaceB
ip netns exec namespaceA ifconfig veth1 20.1.1.2/24 up
ip netns exec namespaceA route add default gataway 20.1.1.1
ifconfig veth0 20.1.1.1/24 up
ip netns exec namespaceA ping 20.1.1.1
在物理机上开启路由转发
vim /etc/sysctl.conf
sysctl -p
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
空间1ping空间2测试是否ping通
ip netns exec namespaceA ping 20.1.1.2
PING 20.1.1.2 (20.1.1.2) 56(84) bytes of data.
64 bytes from 20.1.1.2: icmp_seq=1 ttl=63 time=0.303 ms
64 bytes from 20.1.1.2: icmp_seq=2 ttl=63 time=0.073 ms
64 bytes from 20.1.1.2: icmp_seq=3 ttl=63 time=0.064 ms
64 bytes from 20.1.1.2: icmp_seq=4 ttl=63 time=0.073 ms