如何实现一个虚拟路由器(2)

在《如何实现一个虚拟路由器》中描述了如何通过linux网络虚拟化的基础功能NameSpace、veth pair、bridge、tap实现一个路由器的最小模型,从而实现云计算环境下处于不同网段的虚拟机可以跨网段互通。本文在此基础上继续拓展,从而实现内网访问外网的功能。

主要设计思路为:在上节所提及的虚拟路由NameSpace内添加一个端口,我们称之为external端口,设置此external端口的IP为外部网络的固定IP。在虚拟路由NameSpace内通过设置路由表可以将内部网络(上文例子中的192.168.0.0/24和192.168.1.0/24)向外出的网络包转发到此external端口上。在虚拟路由NameSpace外通过一个veth-pair将NameSpace内的external端口和服务器上的物理网卡连通。

本例子的前提是外部已经有一个网段192.168.149.0/24。其中192.168.149.2是外部网络的网关,通过此网关,网段192.168.149.0/24内的ip可以连通外网,192.168.149.33是在外部网段中挑选的一个空闲ip。

创建一对veth-pair的tap设备,并把一端放入ns_router中,把另一端加入网桥br_mgmt:

创建tap_ext_router和tap_ext_peer
# ip link add tap_ext_router type veth peer name tap_ext_peer
把tap_ext_router放入ns_router
# ip link set tap_ext_router netns ns_router
把tap_ext_peer加入网桥
brctl addif br_mgmt tap_ext_peer

将两个tap设备UP:

# ifconfig tap_ext_peer up
# ip netns exec ns_router ifconfig tap_ext_router up

在ns_router中设置外部ip,并设置默认路由:

# ip netns exec ns_router ip addr add local 192.168.149.33/24 dev tap_ext_router
# ip netns exec ns_router route add default gw 192.168.149.2

前面已经提到192.168.149.2是外部网络192.168.149.0/24的网关,192.168.149.33是在外部网段中挑选的一个空闲ip。

最后虚拟路由NameSpace中的路由信息为:

图片

通过以上设置,整个系统的网络拓扑结构演变为:

图片

在虚拟机内部配置dns为192.168.149.2后就可以ping通外网了。但是这个架构还不能实现VLAN网络隔离和外部网络访问内部网络以及分布式路由的功能。


关注本公众号,了解更多关于云计算虚拟化的知识。

图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值