前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何实现一个虚拟路由器(2)

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

作者头像
虚拟化云计算
发布2019-12-02 19:38:50
1K0
发布2019-12-02 19:38:50
举报
文章被收录于专栏:虚拟化云计算虚拟化云计算

在《如何实现一个虚拟路由器》中描述了如何通过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:

代码语言:javascript
复制
创建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:

代码语言:javascript
复制
# ifconfig tap_ext_peer up# ip netns exec ns_router ifconfig tap_ext_router up

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

代码语言:javascript
复制
# 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网络隔离和外部网络访问内部网络以及分布式路由的功能。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 虚拟化云计算 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档