三层透明模式
拓扑
原理
介绍
-
该模式用三层透明模式命名比较好理解,原理其实就是防火墙上的虚拟系统(路由表相互隔离)
-
真实设备为一个系统,现在虚拟一个系统并称作为虚墙,而真实设备称作为根墙
-
虚墙有独立的防火墙、路由表等功能,而BSS、CC平台下发的配置只会在根墙上,不会与虚墙做访问
-
对于上行设备(光猫),根墙冒充成下行设备(防火墙);对于下行设备(防火墙),虚墙冒充上行设备
部署方式
允许SNAT方式
-
业务流量允许在EC设备上SNAT,会进行两次SNAT(在veth1以及WAN0口上)
- 业务流量经过虚墙时,匹配默认路由以引流到根墙,同时该流量的SIP被SNAT为veth1的接口IP
- 业务流量经过根墙时,匹配默认路由以引流到上行设备,同时该流量的SIP被SNAT为WAN0口的接口IP
-
回程流量经过设备上,会根据NAT会话表映射回原来的SIP
不允许SNAT方式
-
业务流量不允许在EC设备上SNAT,删除veth1以及WAN0口的NSAT规则
-
对于EC设备,去程流量可以根据默认路由以引流到上行设备,而回程流量需要在根墙和虚墙上配置都静态路由以引流到下行设备
- 根墙的静态路由下一跳为veth1(虚墙),虚墙的静态路由下一跳为下行设备的接口IP
部署配置
根墙配置
-
对于上行设备,根墙要冒充下行设备,所以WAN口要配置为下行设备的接口IP
-
若客户不想在WAN口做SNAT,则要删除WAN口的SNAT规则,同时还需要添加静态路由(指向虚墙)作为回程路由
虚墙配置
- 需要通过配置脚本创建一个虚墙,基本配置脚本如下
## 提供变量值并赋值
lanip="192.168.1.1/30"
iface="eth2"
## 创建 localin 虚墙、虚拟接口,并将接口绑定到虚墙中
ip netns add localin ## 创建名为 localin 的虚墙
ip link set dev $iface netns localin ## 将 eth1 绑定到 localin 虚墙里面
ip link add veth0 type veth peer name veth1 ## 创建虚拟接口 veth0 veth1并建立连接关系
ip link set dev veth1 netns localin ## 将 veth1 绑定到 localin 虚墙里面
## 配置IP地址
ip addr replace 192.168.254.1/30 dev veth0 ## 配置 veth0 为192.168.254.1/30
ip netns exec localin ip addr add 192.168.254.2/30 dev veth1 ## 配置 veth1 为192.168.254.2/30
ip netns exec localin ip addr add $lanip dev $iface ## 配置 eth2 为192.168.1.1/30
## 开启接口
ip netns exec localin ip link set $iface up ## 开启 eth2 口
ip link set veth0 up ## 开启 veth0 口
ip netns exec localin ip link set veth1 up ## 开启 veth1 口
## 在虚墙上配置默认路由
ip netns exec localin ip ro add default via 192.168.254.1 dev veth1 ## 在虚墙上配置默认路由,下一跳为 veth0、出接口为 veth1
- 若需要做SNAT,则还需要在基本脚本的最后添加该脚本
ip netns exec localin iptables -t nat -I POSTROUTING -o veth1 -j MASQUERADE ## 在虚墙上配置SNAT,转换地址为 veth1 的IP
- 若不需要做SNAT,则还需要在基本脚本的最后添加该脚本
ip netns exec localin ip route add 172.16.1.0/24 via 192.168.1.2 ## 配置回程路由(172.16.1.0/24),下一跳指向下行设备
注意事项
保存配置
- 上述的配置脚本重启后会失效,需要设置开机自启动功能;
- 若是加速业务,配置脚本可以放置在 /data/obc-vnet/userdefined.sh 文件里面;该文件为用户自定义配置的文件,重启设备时,运行加速程序的同时也会运行这个 userdefined.sh 脚本
- 若是组网业务,配置脚本放置在 /data/cloudswitch/userdefined.sh 文件里面;重启设备时,运行组网程序的同时也会运行这个 userdefined.sh 脚本
弊端
-
若部署方式为不允许SNAT,则下行设备是无法访问Internet,原因是回程流量经过上行设备时,设备根据最长匹配原则,匹配直连路由并认为是二层转发,发送ARP请求报文以知道下行设备的MAC,但是根墙已经在冒充下行设备,回程流量全部由根墙接收,而不会传回下行设备
-
该弊端可以衍生出另一个问题:若上下行设备使用的是业务网段(掩码为24位),该网段存在很多终端,这时终端的回程流量经过上行设备时,设备根据最长匹配原则,匹配直连路由并认为是二层转发,发送的ARP请求(广播)传播的范围只在上行设备和根墙,不会传递到虚墙,更不会传递到终端;由于无法收到ARP应答,不知道终端的MAC,导致回程流量直接丢弃,终端无法访问Internet