SEO: 实现出站入站不同路由、多网卡、Linux 策略路由
问题简述
一般的,在系统路由表内只能有一条默认路由。当出站数据包根据目的IP地址选路失败后,执行默认路由。
但这一条默认路由的设计可能会让您遇到不少问题。比如当您在服务器上运行vpn ,让所有流量走vpn之后,您会发现部署在服务器上的网站在外部访问不到啦。
如何让出站流量和入站流量走不同的路由呢?这就要请出我们今天的主角 ———— 策略路由。
策略路由
策略路由,即 PBR(Policy-Based Routing),与传统的基于IP报文目的地址查找路由表进行转发不同,它可以依据用户自定义的策略进行报文转发。
我们使用 ip-route 和 ip-rule 来完成任务。
(Openwrt 玩家请去安装 ip-full )
示例拓扑
现有 he 和 教育网 两个网络,实现效果为入站使用教育网,出站使用 he 。
主机网卡名为:
CERNET —— eth0
HE —— eth1
CERNET网络为: 192.168.1.2/24
默认网关 192.168.1.1
HE网络为: 192.168.2.2/24
默认网关 192.168.2.1
实现思路
为了方便复制粘贴这里都加上了 sudo
请注意,命令执行都是即时生效的。 如果您正在作死远程配置网络,建议您遵照每一条命令的顺序,避免产生不必要的麻烦。
1. 先加上入站的默认路由
1 | sudo ip route add default via 192.168.1.1 dev eth0 |
2. 接着我们创建路由表
1 | sudo echo "80 he" >> /etc/iproute2/rt_tables |
第一位是优先级,数字越小越优先。第二位是表名称。后面这个文件我建议您执行之前先去看一眼。确保这两个数字小于 0 以外的其它数字。
3. 加上本网段路由
教育网:
1 | sudo ip route add 192.168.1.1/24 dev eno1 table cernet |
HE:
1 | sudo ip route add 192.168.2.1/24 dev tun0 table he |
table 后面是您在第二步时定义的名称
4. 加上两表各自的默认路由
教育网:
1 | sudo ip route add default via 192.168.1.1 table cernet |
HE:
1 | sudo ip route add default via 192.168.2.1 table he |
相信您注意到了,这跟第一步相比就是多了表
5. 定义规则
教育网:
1 | sudo ip rule add from 192.168.1.2/32 table cernet |
HE:
1 | sudo ip rule add from via 192.168.2.2/32 table he |
这里的两个 ip 就是两张网卡各自获得的ip,/32 代表只有这一个ip。翻译一下就是来自这个 ip 的数据包走某个表(网卡)。
You’ve figured it all out.
欢迎留言