router在虚拟网络中就是路由器,实现三层通信作用。
Linux 本身开启转发功能后就是一个路由器。
不过linux默认没有打开路由转发功能。
通过
cat /proc/sys/net/ipv4/ip_forward
命令可以查看路由转发功能是否开启。
如果是1:表示打开了Linux的路由转发功能。
如果是0:表示没有打开路由转发功能。
临时开启方法,重启会失效:
echo "1" > /proc/sys/net/ipv4/ip_forward
永久开启的方法是修改配置文件:“/etc/sysctl.conf”,将net.ipv4.ip_forward=0修改为1,保存后退出即可。
实战
在这个图中,NS1/tap1与NS2/tap2不是在同一个网段,中间需要经过一个路由器进行转发才能互通。图中的Router是一个示意,其实就是Linux开通了路由转发功能。
当我们添加了tap并绑定了IP地址时,Linux会自动生成直连路由。
# 创建veth pair
ip link add tap1 type veth peer name tap1_peer
ip link add tap2 type veth peer name tap2_peer
# 创建namespace
ip netns add ns1
ip netns add ns2
# 将tap迁移到namespace
ip link set tap1 netns ns1
ip link set tap2 netns ns2
# 配置tap IP地址
ip addr add local 192.168.100.1/24 dev tap1_peer
ip addr add local 192.168.200.1/24 dev tap2_peer
ip netns exec ns1 ip addr add local 192.168.100.2/24 dev tap1
ip netns exec ns2 ip addr add local 192.168.200.2/24 dev tap2
# 将tap设置为up
ip link set tap1_peer up
ip link set tap2_peer up
ip netns exec ns1 ip link set tap1 up
ip netns exec ns2 ip link set tap2 up
#ping 此时是ping不通的
$ip netns exec ns1 ping 192.168.200.2
connect: Network is unreachable
# 查看路由表
$ip netns exec ns1 route -nee
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface MSS Window irtt
192.168.100.0 0.0.0.0 255.255.255.0 U 0 0 0 tap1 0 0 0
# 添加路由
ip netns exec ns1 route add -net 192.168.200.0 netmask 255.255.255.0 gw 192.168.100.1
ip netns exec ns2 route add -net 192.168.100.0 netmask 255.255.255.0 gw 192.168.200.1
# 查看路由表
$ip netns exec ns1 route -nee
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface MSS Window irtt
192.168.100.0 0.0.0.0 255.255.255.0 U 0 0 0 tap1 0 0 0
192.168.200.0 192.168.100.1 255.255.255.0 UG 0 0 0 tap1 0 0 0
----
$ip netns exec ns2 route -nee
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface MSS Window irtt
192.168.100.0 192.168.200.1 255.255.255.0 UG 0 0 0 tap2 0 0 0
192.168.200.0 0.0.0.0 255.255.255.0 U 0 0 0 tap2 0 0 0
# ping
$ip netns exec ns1 ping 192.168.200.2
PING 192.168.200.2 (192.168.200.2) 56(84) bytes of data.
64 bytes from 192.168.200.2: icmp_seq=1 ttl=63 time=0.047 ms
64 bytes from 192.168.200.2: icmp_seq=2 ttl=63 time=0.051 ms
64 bytes from 192.168.200.2: icmp_seq=3 ttl=63 time=0.042 ms
64 bytes from 192.168.200.2: icmp_seq=4 ttl=63 time=0.043 ms
64 bytes from 192.168.200.2: icmp_seq=5 ttl=63 time=0.042 ms
64 bytes from 192.168.200.2: icmp_seq=6 ttl=63 time=0.040 ms
64 bytes from 192.168.200.2: icmp_seq=7 ttl=63 time=0.041 ms
64 bytes from 192.168.200.2: icmp_seq=8 ttl=63 time=0.041 ms
版权声明:本文为weixin_45804031原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。