《深入理解OpenStack Neutron》—2.5 Router
2.5 Router
Linux创建Router并没有像创建虚拟Bridge那样,有一个直接的命令brctl,而且它间接的命令也没有,不能创建虚拟路由器……因为它就是路由器(Router)!
不过Linux默认没有打开路由转发功能。可以用这个命令验证一下:
less /proc/sys/net/ipv4/ip_forward
这个命令就是查看一下这个文件(/proc/sys/net/ipv4/ip_forward)的内容。该内容是一个数字。如果是“0”,则表示没有打开路由功能。把“0”修改为“1”,就是打开了Linux的路由转发功能:
echo "1" > /proc/sys/net/ipv4/ip_forward
这种打开方法,在机器重启以后就会失效了。一劳永逸的方法是修改配置文件“/etc/sysctl.conf”,将net.ipv4.ip_forward = 0修改为1,保存后退出即可。
下面我们仍然通过一个测试用例来直观感受一下Router的功能。测试用例组网图如
图2-5所示。
图2-5 跨网段的namespace/tap互通测试组网图
在这个图2-5中,NS1/tap1与NS2/tap2不在同一个网段中,中间需要经一个路由器进行转发才能互通。图中的Router是一个示意,其实就是Linux开通了路由转发功能。
当我们添加了tap并给其绑定IP地址时,Linux会自动生成直连路由,如图2-6所示。
图2-6 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一下:
ip netns exec ns1 ping 192.168.200.2
connect: Network is unreachable
ping不通,网络不可达。我们查看一下ns1的路由表:
ip netns exec ns1 route -nee
图2-7是nsl的路由表截图,从图中可以看到,ns1并没有到达192.168.200.0/24的路由表项,我们需要手工添加。命令行如下:
图2-7 ns1的路由表
# ns1、ns2 都添加静态路由,分别到达对方的网段
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
这个时候,我们再来查看ns1的路由信息,ns1已经具有到达192.168.200.0/24的路由表项,如图2-8所示。
ip netns exec ns1 route -nee
图2-8 增加静态路由后的ns1的路由表
再重新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.040 ms
......
ip netns exec ns2 ping 192.168.100.2
PING 192.168.100.2 (192.168.100.2) 56(84) bytes of data.
64 bytes from 192.168.100.2: icmp_seq=1 ttl=63 time=0.030 ms
......
- 点赞
- 收藏
- 关注作者
评论(0)