伟明部落格

最简单的基于目的地址的IP分流

--发布于 2022-05-12 20:33:13

现在家里的VMware虚拟机,装了个CentOS7,共有两个网络出口。第1个是家里的移动宽带,第2个是CentOS7上的Wi-Fi连手机共享出来的无线热点来上网。

相关信息如下:

# 移动宽带
网卡名称:ens33
网卡IP:192.168.3.33 
网关:192.168.3.1
公网IP: 120.239.197.251

# 无线网卡
网卡名称:wls35u1
网卡IP:192.168.43.208 
网关:192.168.43.1
公网IP: 120.197.198.163

首先,添加表route1和route2到rt_tables中

vim /etc/iproute2/rt_tables
# 添加下面这两行
11 route1
12 route2

然后,添加路由策略

# 目的地址为108.61.246.21的数据包使用路由表route1
ip rule add to 108.61.246.21 table route1
# 目的地址为8.210.252.214的数据包使用路由表route2
ip rule add to 8.210.252.214 table route2

为这两个路由表添加路由项目

# 发往108.61.246.21的数据包使用【移动宽带】网关
ip route add 108.61.246.21 via 192.168.3.1 table route1
# 发往8.210.252.214的数据包使用【无线网卡】网关
ip route add 8.210.252.214 via 192.168.43.1 table route2

相关输出信息如下

[root@localhost ~]# ip rule list
0:  from all lookup local 
32764:  from all to 8.210.252.214 lookup route2 
32765:  from all to 108.61.246.21 lookup route1 
32766:  from all lookup main 
32767:  from all lookup default 

[root@localhost ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.3.1     0.0.0.0         UG    100    0        0 ens33
0.0.0.0         192.168.43.1    0.0.0.0         UG    800    0        0 wls35u1
192.168.3.0     0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.43.0    0.0.0.0         255.255.255.0   U     600    0        0 wls35u1
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

[root@localhost ~]# ip route show table main
default via 192.168.3.1 dev ens33 proto dhcp metric 100 
default via 192.168.43.1 dev wls35u1 metric 800 
192.168.3.0/24 dev ens33 proto kernel scope link src 192.168.3.33 metric 100 
192.168.43.0/24 dev wls35u1 proto kernel scope link src 192.168.43.208 metric 600 
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 

[root@localhost ~]# ip route show table route1
108.61.246.21 via 192.168.3.1 dev ens33 

[root@localhost ~]# ip route show table route2
8.210.252.214 via 192.168.43.1 dev wls35u1 

ping 108.61.246.21,可以看到出口IP是120.239.197.251,也就是使用【移动宽带】出口,网卡为ens33

# 在108.61.246.21机器上运行tcpdump -nn -i eth0 icmp命令抓取ping包
21:20:00.987601 IP 120.239.197.251 > 108.61.246.21: ICMP echo request, id 42719, seq 3760, length 64
21:20:00.987652 IP 108.61.246.21 > 120.239.197.251: ICMP echo reply, id 42719, seq 3760, length 64

ping 8.210.252.214,可以看到出口IP是120.197.198.163,也就是使用【无线网卡】出口,网卡为wls35u1

# 在8.210.252.214机器上运行tcpdump -nn -i eth0 icmp命令抓取ping包
21:23:20.147107 IP 120.197.198.163 > 172.17.56.20: ICMP echo request, id 45250, seq 11207, length 64
21:23:20.147135 IP 172.17.56.20 > 120.197.198.163: ICMP echo reply, id 45250, seq 11207, length 64

从上面可以看到,同一台主机,根据目的IP的不同,使用不同的出口,从而实现了IP数据分流的效果。

--更新于 2023-03-09 10:51:41