Linux网络虚拟化 Router

本文假设已经具备基本的路由交换基础。个人学习记录,欢迎指正。

Linux其实原生就是一台路由器,只是默认他只转发自身包含的地址段的流量,要想实现转发非自身(非默认名称空间)的数据包,需要开启路由转发功能。

学过数通的同学肯定记得,路由器中有VRF来实现路由表的隔离实现虚拟路由,Linux中其实也有该项技术,但是这里我们主要是让Linux实现路由器功能,暂不涉及隔离相关问题。后续会单独整理Linux中VRF的实现。

操作路由

# 开启路由转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward  						# 临时开启
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf  # 永久开启
sysctl -p /etc/sysctl.conf

# 添加路由
ip route add default via x.x.x.x dev ethx 					# 添加默认路由
ip route add 1.1.1.1/32 via x.x.x.x dev ethx				# 添加明细路由
ip route add blackhole 1.1.1.2/32										# 添加黑洞路由

# 查看路由
ip route show

# 删除路由
ip route del blackhole 1.1.1.2/32

模拟路由转发实现

之前我们测试了Bridge这个虚拟设备,实现了二层的转发和vlan tag过滤等功能。因为默认我们创建的Bridge都是在默认网络名称空间创建的,他们的协议栈是同一空间,所以逻辑上所有交换机都是通过默认协议栈连接在一块的。当打开路由转发功能之后,Bridge更像是一台三层交换,流量会触发三层寻路,就会查找的路由表实现转发。

拓扑如图,我们给BR配置IP地址,也就是下层网络的出口网关。给默认名称空间打开路由转发功能之后,这时候逻辑上就相当于一个大路由器,BR可以简单理解成vlan interface(这里只是为了方便理解)。
请添加图片描述

# 打开路由转发
echo 1 > /proc/sys/net/ipv4/ip_forward

# 创建ns,模拟终端
ip netns add ns1
ip netns add ns2

# 创建BR设备,配置并启用
ip link add BR1 type bridge
ip link set BR1 up
ip addr add 10.0.1.1/24 dev BR1
ip link add BR2 type bridge
ip link set BR2 up
ip addr add 10.0.2.1/24 dev BR2

# 创建veth
ip link add veth1 type veth peer name veth11
ip link add veth2 type veth peer name veth22

# 如图分配veth到ns设备,配置并启用
ip link set dev veth11 netns ns1
ip netns exec ns1 ip addr add 10.0.1.2/24 dev veth11
ip netns exec ns1 ip link set veth11 up
ip link set dev veth22 netns ns2
ip netns exec ns2 ip addr add 10.0.2.2/24 dev veth22
ip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值