Linux 单路由双网关双外网双网卡的配置
另请参阅:当 RHEL 配置了多个 IP 时,只能从远程网络访问一个。或者当出站流量的路由与传入流量的路由不同时,为什么 RHEL 会忽略数据包?
目前我们使用的是 dell 服务器,网卡的名字叫做 em1 em2 em3 em4,不同于普通的系统叫做 eth0 什么的的。
我这里子网掩码都是 24
(255.255.255.0
)根据您的环境进行调整。
我的系统为 Centos 7.6。
假定
- 网卡 1 的内网 IP 地址是
10.1.1.241
,网关 1 的内网 IP 地址是10.1.1.2
; - 网卡 2 的内网 IP 地址是
10.1.2.241
,网关2 的内网 IP 地址是10.1.2.2
;
1.增加网关地址
route add -net 10.1.1.0 netmask 255.255.255.0 gw 10.1.1.2
route add -net 10.1.2.0 netmask 255.255.255.0 gw 10.1.2.2
route add
添加静态路由;route add -net 10.1.1.0 netmask 255.255.255.0 gw 10.1.1.2
把所有10.1.1.0
网段的数据包的网关指定为10.1.1.2
子网掩码设置为255.255.255.0
;
根据你的实际情况填写
如果你的路由器支持绑定,好像不添加也行?
因为我发现我们系统的路由表是:(使用route -n
查看路由表)
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.1.1.2 0.0.0.0 UG 100 0 0 em1
0.0.0.0 10.1.2.2 0.0.0.0 UG 101 0 0 em2
10.1.1.0 0.0.0.0 255.255.255.0 U 100 0 0 em1
10.1.2.0 0.0.0.0 255.255.255.0 U 101 0 0 em2
我有设置过吗?
实测在路由器配置过后不用进行此步骤。
增加网关地址后:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.1.1.2 0.0.0.0 UG 100 0 0 em1
0.0.0.0 10.1.2.2 0.0.0.0 UG 101 0 0 em2
10.1.1.0 10.1.1.2 255.255.255.0 UG 0 0 0 em1
10.1.1.0 0.0.0.0 255.255.255.0 U 100 0 0 em1
10.1.2.0 10.1.2.2 255.255.255.0 UG 0 0 0 em2
10.1.2.0 0.0.0.0 255.255.255.0 U 101 0 0 em2
#Destination
目标网络或目标主机。Destination 默认是0.0.0.0
,表示这个是默认网关,所有地址的数据都发到这个网关。
#Gateway
网关地址。0.0.0.0
表示当前记录对应的 Destination 跟本机在同一个网段,通信时不需要经过网关。
#Genmask
Destination的网络掩码,也就是你常听到的子网掩码。Destination 是主机时需要设置为 255.255.255.255
,是默认路由时会设置为 0.0.0.0
#Flags
标记,含义见下表
#Metric
路由距离,到达指定网络所需的中转数,是大型局域网和广域网设置所必需的。Linux 内核路由表此项无效
#Use
此路由项被路由软件查找的次数,没啥用?
#Iface
网卡名字,em 是 dell 服务器专用的名字,其他的一般是 eth0 之类的
Flags 标记含义表 | |
U | 路由是活动/激活的 |
H | 目标是个主机 |
G | 需要经过网关 |
R | 恢复动态路由产生的表项 |
D | 由路由的后台程序动态安装 |
M | 由路由的后台程序修改 |
! | 拒绝路由 |
2.添加策略路由表
似乎是没有命令能添加路由表的,只能手动添加,不是很懂这个设计(iproute2 的命令不是持久化,可能是这个原因)。
vim /etc/iproute2/rt_tables
#修改 /etc/iproute2/rt_table,添加策略路由表
根据里面的顺序添加2行(添加2个路由表)
默认:
255 local
254 main
253 default
0 unspec
添加后:
255 local
254 main
253 default
252 net_nem2
251 net_nem1
0 unspec
前面的数字
其实是优先级来着,一般都当做序号用了。数值越小优先级别越高。net_nem1 net_nem2
是策略名字,可以自己选择255 local
本地路由表(Local table) 本地接口地址,广播地址,以及NAT地址都放在这个表。该路由表由系统自动维护,管理员不能直接修改。254 main
主路由表(Main table) 如果没有指明路由所属的表,所有的路由都默认都放在这个表里,一般来说,旧的路由工具(如 route)所添加的路由都会加到这个表。一般是普通的路由。253 default
默认路由表 (Default table) 一般来说默认的路由都放在这张表,但是如果特别指明放的也可以是所有的网关路由。0 unspec
保留路由表,一般没用。
3.添加原路返回策略路由
让指定网关发来的数据回到指定的网关。
vim /etc/rc.local
# 修改/etc/rc.local,让它每次开机都执行,因为 iproute2 的命令不会持久化,每次重启后会丢失。
ip route flush table net_nem1
ip route add default via 10.1.1.2 dev em1 src 10.1.1.241 table net_nem1
ip rule add from 10.1.1.241 table net_nem1
ip route flush table net_nem2
ip route add default via 10.1.2.2 dev em2 src 10.1.2.241 table net_nem2
ip rule add from 10.1.2.241 table net_nem2
ip
iproute工具,一个网络管理工具包合集;router
路由管理;rule
路由策略;ip route flush table net_nem1
刷新/清空路由表 net_nem1 的路由;ip route add default via 10.1.1.2 dev em1 src 10.1.1.241 table net_nem1
添加一条路由规则到 net_nem1 路由表,et_nem1 这个路由表中数据包默认使用源 IP10.1.1.241
通过网口设备 em1 走网关10.1.1.2
;ip rule add from 10.1.1.241 table net_nem1
把来自10.1.1.241
的数据包都交给路由表 net_nem1 处理;
这里面的内容要根据你实际内容填写,比如 IP 地址和策略路由表名称啥的。
然后运行一遍这些命令,不要断开 ssh,以防不测。
systemctl restart network
systemctl restart network
重启网络接口;
然后 ping 服务器并马上再开几个 ssh 连接上去试试,服务器有几个 IP 都试试,如果能上说明网络没有问题。
不能上说明你哪里搞错了,赶快用还连着的 ssh 补救。
最后,你可以使用 ip route get <IP地址>
来查看该地址会从哪个接口出去,比如 ip route get 192.1.1.10
。
警告:不要运行 ip rule flush
否则所有网络连接都会端开,直到你重启设备。
无评论