Loading... <div class="tip share">请注意,本文编写于 635 天前,最后修改于 510 天前,其中某些信息可能已经过时。</div> ## 背景 最近在负责北大物院的一个服务器的维护,提供了公网访问,~~但由于CERNET高额的流量费(¥0.5/MB)~~,某天不知道哪个系统部件突然跑了1G流量,直接就欠费了。于是我给服务器又加上了一个网卡,连到学工办的一个路由器上。但测试发现使用默认配置时,只能使用一张网卡,而且每次重启后主网卡都不一样。。。玄学_(:з」∠)_ ## 解决方案 服务器对应网络信息如下: | 网卡 | IP | 网关 | 备注 | | :---: | :---: | :---: | :---: | | p4p1 | 192.168.1.x | 192.168.1.1 | 直连学工办路由器,流量不收费 | | p8p1 | 162.105.145.22 | 162.105.145.1 | 公网IP,v4流量巨贵 | 下面来实现需求,即: 1. 两网卡可同时访问,即 p4p1 网卡IP可在局域网内访问,p8p1网卡IP在校园网防火墙内可访问。 2. 服务器对于校内地址默认走 p8p1 网卡,对于其他地址默认走 p4p1 网卡,以减少收费地址流量损耗。 ### 配置网络 首先修改两块网卡的配置信息,由于服务器是 Centos 系统,网卡信息在 `/etc/sysconfig/network-scripts/` 文件夹下,将两网卡的配置信息中的 `DEFROUTE=yes` 全都改为 `DEFROUTE=no` <div class="tip inlineBlock error"> 如果你现在重启网络,那么你将会只能在局域网内访问该主机,由于我是远程操作的,所以现在先不重启网络。 </div> 如果你是在本机上操作,或者有VNC之类的,执行命令 ```bash service network restart ``` 重启网络后,利用命令 ```bash ip route show ``` 可以查看到当前的路由表为 ```bash 162.105.145.0/24 dev p8p1 proto kernel scope link src 162.105.145.22 metric 100 192.168.1.0/24 dev p4p1 proto kernel scope link src 192.168.1.110 metric 101 ``` ### 增加路由表 Linux 中的路由由路由规则和路由表组成。路由规则指定当数据包满足规则时,应转交到哪个路由表;路由表根据数据包的信息,选择下一跳。 可通过 `ip rule` 看当前的路由策略,如: ```bash 0: from all lookup local 32766: from all lookup main 32767: from all lookup default ``` 可以看出内核最多支持 32768条路由规则。 Linux 中支持 256 张路由表,编号为 0 到 255,可直接使用编号操作,也可使用编号的别名操作,编号和其别名的对应关系在 /etc/iproute2/rt_tables 文件中。 默认有 `local,main,default` 三个路由表,这三个路由表的名称命名就来自 `/etc/iproute2/rt_tables`。 ```bash $ cat /etc/iproute2/rt_tables # # reserved values # 255 local 254 main 253 default 0 unspec # # local # #1 inr.ruhep #252 table252 #251 table251 #102 edu #101 lede ``` 在 `/etc/iproute2/rt_tables` 配置文件里面添加两个不同的路由表别名。增加三个路由表分别是: `p4p1:lede`、`p8p1:edu`。 ```bash $ echo "102 edu" >> /etc/iproute2/rt_tables $ echo "101 lede" >> /etc/iproute2/rt_tables ``` 因为这两个路由表的只是用来响应来自不同接口的,所以只需要每个路由表里面建立默认网关即可。 ```bash $ ip route add default via 192.168.1.1 dev p4p1 table lede $ ip route add default via 162.105.145.1 dev p8p1 table edu ``` 查看新增路由表中内容 ```bash $ ip route show table lede default via 192.168.1.1 dev p4p1 $ ip route show table edu default via 162.105.145.1 dev p8p1 ``` ### 增加路由规则 增加路由原路返回规则,使来自不同的口的走不同的路由表。 ```bash $ ip rule add from 192.168.1.x table lede $ ip rule add from 162.105.145.22 table edu ``` 查看新增的路由规则 ```bash $ ip rule 0: from all lookup local 32764: from 162.105.145.22 lookup edu 32765: from 192.168.1.x lookup lede 32766: from all lookup main 32767: from all lookup default ``` 至此访问两个网段中的任意一个地址都能够连通了。即便是服务器上本身的默认路由都没有设置,也能够让外面的用户正常访问。 ### 增加路由 由于我们仍需要服务器访问外部的网站,例如获取应用更新等,于是先增加一个默认路由,走 p4p1 网卡: ```bash ip route add default via 192.168.1.1 dev p4p1 ``` 而我们还需要访问校内地址时使用 p8p1 网卡,所以增加一个路由 ```bash ip route add 162.105.0.0/16 via 162.105.145.1 dev p8p1 ``` ## 测试配置结果 执行完上述命令后,重启网络。 1. 测试从p4p1的包的路由选择 ```bash $ ip route get 114.114.114.114 from 192.168.1.x 114.114.114.114 from 192.168.1.x via 192.168.1.1 dev p4p1 cache ``` 2. 测试从p8p1的包的路由选择 ```bash $ ip route get 114.114.114.114 from 162.105.145.22 114.114.114.114 from 162.105.145.22 via 162.105.145.1 dev p8p1 cache ``` 3. 测试默认路由 ```bash $ ip route get 114.114.114.114 114.114.114.114 via 192.168.1.1 dev p4p1 src 192.168.1.x cache ``` 4. 测试校内路由 ```bash $ ip route get 162.105.129.65 162.105.129.65 via 162.105.145.1 dev p8p1 src 162.105.145.22 cache ``` 最后修改:2021 年 02 月 10 日 © 禁止转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏