仅作为自己笔记查看,无任何参考价值
ubuntu服务器插着内网的网线,为内网提供服务,然后我还有一台用来做穿透的路由器通过发射wifi来连接服务器。如果拔掉内网网线,那么我在外网可以通过路由器访问它,一旦插上内网的网线,我在外面就不通了。
路由优先级 :由于有两个默认路由,
eno1
(内网)和wlp2s0
(外网)都有默认路由,但它们的 metric 值不同。其中eno1
的 metric 值是 100,而wlp2s0
是 600。这意味着系统倾向于使用eno1
的路由。流量方向 :当有流量从外网到达您的服务器时,流量会通过
wlp2s0
接口,而回复的流量可能会被路由到eno1
接口,这可能会导致连接不通。
bash
ip route
输出如下:
aa@aa:~$ ip route
default via 192.168.99.253 dev eno1 proto dhcp metric 100
default via 192.168.3.253 dev wlp2s0 proto static metric 600
169.254.0.0/16 dev wlp2s0 scope link metric 1000
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
172.18.0.0/16 dev br-dd119850bf83 proto kernel scope link src 172.18.0.1
192.168.3.0/24 dev wlp2s0 proto kernel scope link src 192.168.3.10 metric 600
192.168.99.0/24 dev eno1 proto kernel scope link src 192.168.99.159 metric 100
eno1是内网,这是一定要通的。wlp2s0是连接外网路由器的
创建路由表:
编辑 /etc/iproute2/rt_tables
文件,添加一个新的路由表,例如:
bash
echo "200 external" | sudo tee -a /etc/iproute2/rt_tables
添加路由:
添加 wlp2s0
接口的路由到这个新表中:
bash
sudo ip route add default via 192.168.3.253 dev wlp2s0 table external
设置策略路由:
设置流量到 192.168.3.0/24
网络使用主路由表,其他流量使用 external
表:
bash
sudo ip rule add from 192.168.3.10 lookup external sudo ip rule add from 192.168.99.159 lookup main
此设置将确保来自外网的流量通过 wlp2s0
接口路由,而内网流量仍然通过 eno1
接口路由。
10分钟自检脚本
bash
#!/bin/bash
# 检查路由规则是否存在
if ! ip rule show | grep -q "from 192.168.3.10 lookup external"; then
# 如果不存在,则添加规则
ip rule add from 192.168.3.10 lookup external
fi
if ! ip rule show | grep -q "from 192.168.99.159 lookup main"; then
# 如果不存在,则添加规则
ip rule add from 192.168.99.159 lookup main
fi
# 检查路由表是否存在
if ! ip route show table external | grep -q "default via 192.168.3.253"; then
# 如果不存在,则添加路由
ip route add default via 192.168.3.253 dev wlp2s0 table external
fi
done.