linux两个网段默认网关_Linux下配置多网卡多网关
原標(biāo)題:Linux下配置多網(wǎng)卡多網(wǎng)關(guān)
大家好,今天給大家介紹一下Linux下配置多網(wǎng)卡多網(wǎng)關(guān)的方法。@Hi-Linux
場(chǎng)景一 多運(yùn)營(yíng)商線路
比較典型的一種場(chǎng)景:一臺(tái) Linux 服務(wù)器上有三個(gè)網(wǎng)口并接入三個(gè)不同運(yùn)營(yíng)商的網(wǎng)絡(luò),以實(shí)現(xiàn)不同運(yùn)營(yíng)商用戶訪問其對(duì)應(yīng)的網(wǎng)絡(luò)線路,來減少網(wǎng)絡(luò)延時(shí)。
服務(wù)器及對(duì)應(yīng)網(wǎng)絡(luò)信息如下:
一臺(tái) Ubuntu 16.04 server,這里一共使用三塊網(wǎng)卡。假定網(wǎng)絡(luò)信息如下:
網(wǎng)卡名稱
IP
網(wǎng)關(guān)
備注
enp0s5
192.168.100.212
192.168.100.1
電信線路
enp0s6
192.168.110.213
192.168.110.1
聯(lián)通線路
enp0s7
192.168.120.214
192.168.120.1
教育網(wǎng)線路
這里 IP 只是為了區(qū)分各運(yùn)營(yíng)商線路做的示例,實(shí)際情況請(qǐng)以運(yùn)營(yíng)商給出的網(wǎng)絡(luò)信息調(diào)整。
下面我們來看如何實(shí)現(xiàn)這樣的需求:
在 Linux 下一臺(tái)多網(wǎng)卡服務(wù)器不能同時(shí)配置兩個(gè)及以上的默認(rèn)網(wǎng)關(guān),因?yàn)槟J(rèn)網(wǎng)關(guān)(Default Gateway)只能配置一個(gè),通過 gateway 參數(shù)配置的網(wǎng)關(guān)在這里實(shí)際為默認(rèn)路由。
這里通過配置 Linux 下策略路由來實(shí)現(xiàn),通過原線路返回的策略路由可以實(shí)現(xiàn)多線多 IP 同時(shí)在線。讓從同一運(yùn)營(yíng)商過來的請(qǐng)求由原運(yùn)營(yíng)商線路返回,比如:電信IP過來的請(qǐng)求按照電信路由返回,從網(wǎng)通IP過來的求從網(wǎng)通路由返回。
配置網(wǎng)絡(luò)
首先配置三塊網(wǎng)卡的基本網(wǎng)絡(luò)信息。$ vim /etc/network/interfacesauto enp0s5iface enp0s5 inet staticaddress 192.168.100.212netmask 255.255.255.0auto enp0s6iface enp0s6 inet staticaddress 192.168.110.213netmask 255.255.255.0auto enp0s7iface enp0s7 inet staticaddress 192.168.120.214netmask 255.255.255.0
重啟網(wǎng)絡(luò)$ /etc/init.d/networking restart
查看配置好的網(wǎng)絡(luò)情況$ ip a|grep enp0s2: enp0s5: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000inet 192.168.100.212/24 brd 192.168.100.255 scope global enp0s53: enp0s6: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000inet 192.168.110.213/24 brd 192.168.110.255 scope global enp0s64: enp0s7: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000inet 192.168.120.214/24 brd 192.168.120.255 scope global enp0s7
查看各網(wǎng)卡當(dāng)前路由$ ip route show192.168.100.0/24 dev enp0s5 proto kernel scope link src 192.168.100.212192.168.110.0/24 dev enp0s6 proto kernel scope link src 192.168.110.213192.168.120.0/24 dev enp0s7 proto kernel scope link src 192.168.120.214 增加路由表
Linux 中的路由由路由規(guī)則和路由表組成。路由規(guī)則指定當(dāng)數(shù)據(jù)包滿足規(guī)則時(shí),應(yīng)轉(zhuǎn)交到哪個(gè)路由表;路由表根據(jù)數(shù)據(jù)包的信息,選擇下一跳。
可通過 ip rule 看當(dāng)前的路由策略,如:
$ ip rule0: from all lookup local32766: from all lookup main32767: from all lookup default
從這里也可以看出在內(nèi)核中最多支持 32768 條路由規(guī)則。這里的 main 表是系統(tǒng)主要的路由表,所有的路由規(guī)則都寫在這個(gè)表中。
查看 main 表$ ip route list table main192.168.100.0/24 dev enp0s5 proto kernel scope link src 192.168.100.212192.168.110.0/24 dev enp0s6 proto kernel scope link src 192.168.110.213192.168.120.0/24 dev enp0s7 proto kernel scope link src 192.168.120.214
Linux 中支持 256 張路由表,編號(hào)為 0 到 255,可直接使用編號(hào)操作,也可使用編號(hào)的別名操作,編號(hào)和其別名的對(duì)應(yīng)關(guān)系在 /etc/iproute2/rt_tables 文件中。
默認(rèn)有 local,main,default 三個(gè)路由表,這三個(gè)路由表的名稱命名就來自 /etc/iproute2/rt_tables。
$ cat /etc/iproute2/rt_tables## reserved values#255 local254 main253 default0 unspec## local##1 inr.ruhep
注:數(shù)字范圍為0-255,但0、255、254、253是保留的,不能使用。
增加三個(gè)路由表
在 /etc/iproute2/rt_tables 配置文件里面添加三個(gè)不同的路由表別名。增加三個(gè)路由表分別是: enp0s5:ChinaTel、enp0s5:ChinaCnc、enp0s5:ChinaEdu。
$ echo "101 ChinaTel" >> /etc/iproute2/rt_tables$ echo "102 ChinaCnc" >> /etc/iproute2/rt_tables$ echo "103 ChinaEdu" >> /etc/iproute2/rt_tables
因?yàn)檫@三個(gè)路由表的只是用來響應(yīng)來自不同接口的,所以只需要每個(gè)路由表里面建立默認(rèn)網(wǎng)關(guān)即可。
$ ip route add default via 192.168.100.1 dev enp0s5 table ChinaTel$ ip route add default via 192.168.110.1 dev enp0s6 table ChinaCnc$ ip route add default via 192.168.120.1 dev enp0s7 table ChinaEdu
如果要指定某一源 IP,可以加上 src 參數(shù)。
$ ip route add default via 192.168.100.1 dev eth0 src 192.168.100.212 table ChinaTel
查看新增路由表中內(nèi)容$ ip route show table ChinaTeldefault via 192.168.100.1 dev enp0s5$ ip route show table ChinaCncdefault via 192.168.110.1 dev enp0s6$ ip route show table ChinaEdudefault via 192.168.120.1 dev enp0s7
增加路由原路返回規(guī)則,使來自不同的口的走不同的路由表。$ ip rule add from 192.168.100.212 table ChinaTel$ ip rule add from 192.168.110.212 table ChinaCnc$ ip rule add from 192.168.120.212 table ChinaEdu
注意:此處原路是廣義上的說法,并不是請(qǐng)求的路徑與響應(yīng)的路徑完全相同。
如果要指定規(guī)則優(yōu)先級(jí),可以加上 pref 參數(shù)。pref 即路由表內(nèi)序號(hào),如果不加 pref,則將在已有的規(guī)則最小序號(hào)前插入。
$ ip rule add from 192.168.100.212/32 table ChinaTel pref 100
查看新增的路由規(guī)則$ ip rule0: from all lookup local32763: from 192.168.120.212 lookup ChinaEdu32764: from 192.168.110.212 lookup ChinaCnc32765: from 192.168.100.212 lookup ChinaTel32766: from all lookup main32767: from all lookup default
如果需要修改某一條路由規(guī)則,可根據(jù)優(yōu)先級(jí)刪除指定路由規(guī)則后重新增加:
$ ip rule del prio 32767
至此訪問三個(gè)網(wǎng)段中的任意一個(gè)地址都能夠連通了。即便是服務(wù)器上本身的默認(rèn)路由都沒有設(shè)置,也能夠讓外面的用戶正常訪問。如果你要在默認(rèn)路由表增加一個(gè)默認(rèn)路由,可以使用如下命令:
$ ip route add default via 192.168.100.1 dev enp0s5$ ip route show table maindefault via 192.168.100.1 dev enp0s5192.168.100.0/24 dev enp0s5 proto kernel scope link src 192.168.100.212192.168.110.0/24 dev enp0s6 proto kernel scope link src 192.168.110.213192.168.120.0/24 dev enp0s7 proto kernel scope link src 192.168.120.214
main 表是系統(tǒng)主要的路由表,所有的默認(rèn)路由規(guī)則都寫在這個(gè)表中。命令匯總 # 清空路由表ChinaTel$ ip route flush table ChinaTel# 為路由表 ChinaTel 添加默認(rèn)路由 192.168.100.1$ ip route add default via 192.168.100.1 dev enp0s5 table ChinaTel# 根據(jù)源 IP 決定路由表$ ip rule add from 192.168.100.212 table ChinaTel# 清空路由表ChinaCnc$ ip route flush table ChinaCnc# 為路由表 ChinaCnc 添加默認(rèn)路由 192.168.110.1$ ip route add default via 192.168.110.1 dev enp0s6 table ChinaCnc# 根據(jù)源 IP 決定路由表$ ip rule add from 192.168.110.212 table ChinaCnc# 清空路由表ChinaEdu$ ip route flush table ChinaEdu# 為路由表 ChinaEdu 添加默認(rèn)路由 192.168.120.1$ ip route add default via 192.168.120.1 dev enp0s7 table ChinaEdu# 根據(jù)源 IP 決定路由表$ ip rule add from 192.168.120.212 table ChinaEdu 測(cè)試
驗(yàn)證從 192.168.100.212 的包的路由選擇$ ip route get 8.8.8.8 from 192.168.100.212# 結(jié)果為8.8.8.8 from 192.168.100.212 via 192.168.100.1 dev enp0s5cache
驗(yàn)證從 192.168.110.213 的包的路由選擇$ ip route get 8.8.8.8 from 192.168.110.213# 結(jié)果為8.8.8.8 from 192.168.110.213 via 192.168.110.1 dev enp0s6cache
驗(yàn)證從 192.168.120.214 的包的路由選擇$ ip route get 8.8.8.8 from 192.168.120.214# 結(jié)果為8.8.8.8 from 192.168.120.214 via 192.168.120.1 dev enp0s7cache
外部測(cè)試$ ping 192.168.100.212$ ping 192.168.110.213$ ping 192.168.120.214
以上幾個(gè) IP 均能 Ping 通。
保存路由設(shè)置
以上的路由設(shè)置會(huì)在系統(tǒng)或網(wǎng)絡(luò)重啟后被清理。因此需要將它保存下來,以防止系統(tǒng)或網(wǎng)絡(luò)重啟后失效。
方法一(推薦)
ip route save 可保存表的信息,如果表的項(xiàng)非常多,這個(gè)操作起來非常簡(jiǎn)單;ip rule 沒有專門的保存命令,這里通過腳本實(shí)現(xiàn)。
先保存指定路由表的信息,這里以 ChinaTel 為例:
$ ip route save table ChinaTel > /root/route-ChinaTel.rules
恢復(fù)時(shí)可使用
$ ip route flush table ChinaTel && ip route restore table ChinaTel < /root/route-ChinaTel.rules
對(duì)規(guī)則的保存可使用以下的小腳本
$ vim ip-rule-dump.sh#!/bin/sh# ip-rule-dump.sh# 參數(shù): table 編號(hào)或別名,無參數(shù)時(shí) dump 除 local 之外的全部規(guī)則# 獲取 table 別名if [ -n "$1" ]; thenname=$(grep -v '^[[:blank:]]*#' /etc/iproute2/rt_tables |grep "[[:blank:]]*$1[[:blank:]]" | head -n 1 | awk '{print $2}')[ -z "$name" ] && name="$1"fi[ -z "$name" ] && name=".*"# 獲取并使用別名過濾規(guī)則ip rule show | grep -v "^0:" | grep -oP "from.*[[:blank:]]$name[[:blank:]]$" |sed -e 's/lookup/table/g'
給腳本賦予權(quán)限并保存指定的路由規(guī)則
$ chmod +x ip-rule-dump.sh$ ./ip-rule-dump.sh ChinaTel > /root/rule-ChinaTel.rules
對(duì)規(guī)則的恢復(fù)可使用以下的小腳本
$ vim ip-rule-restore.sh#!/bin/sh# ip-rule-restore.sh# 參數(shù): dump 文件路徑if [ -n "$1" ] && [ -f "$1" ]; thencat $1 | while read line; dosudo ip rule add $linedonefi
給腳本賦予權(quán)限并恢復(fù)指定的路由規(guī)則
$ chmod +x ip-rule-restore.sh$ ip rule del table ChinaTel >/dev/null 2>&1 || :$ ./ip-rule-restore.sh /root/rule-ChinaTel.rules
開機(jī)加載
如果需要在網(wǎng)卡準(zhǔn)備完成就加載,就需要在 /etc/network/interfaces 的對(duì)應(yīng)網(wǎng)卡上,加上 post-up 的操作了,這里以加載電信路由信息為例:
$ iface enp0s5 inet static...post-up ( ip rule del table ChinaTel >/dev/null 2>&1 || : ) && bash /root/ip-rule-restore.sh /root/rule-ChinaTel.rules && ip route flush table ChinaTel && ip route restore table ChinaTel < /root/route-ChinaTel.rules
方法二
直接把命令加入啟動(dòng)腳本中,以防止網(wǎng)絡(luò)重啟或系統(tǒng)重啟后配置失效。
配置 networking 啟動(dòng)腳本文件 在結(jié)尾 exit 0 之前增加如下內(nèi)容:
如果是 ubuntu/debian,網(wǎng)絡(luò)啟動(dòng)腳本是 /etc/init.d/networking
如果是 RedHat/centos,網(wǎng)絡(luò)啟動(dòng)腳本是 /etc/rc.d/init.d/network這里以 ubuntu 為例:
$ vi /etc/init.d/networkingip route flush table ChinaTelip route add default via 192.168.100.1 dev enp0s5 table ChinaTelip rule add from 192.168.100.212 table ChinaTelip route flush table ChinaCncip route add default via 192.168.110.1 dev enp0s6 table ChinaCncip rule add from 192.168.110.212 table ChinaCncip route flush table ChinaEduip route add default via 192.168.120.1 dev enp0s7 table ChinaEduip rule add from 192.168.120.212 table ChinaEduexit 0
退出并重啟網(wǎng)絡(luò)測(cè)試是否生效
$ /etc/init.d/networking restart 場(chǎng)景二 給指定網(wǎng)段分別設(shè)置網(wǎng)關(guān)
這種方法使用的是默認(rèn)路由表,增加到指定網(wǎng)段的路由。
使用 route 指令$ route add -net 192.168.100.0/24 gw 192.168.100.1 dev enp0s5$ route add -net 192.168.110.0/24 gw 192.168.110.1 dev enp0s6$ route add -net 192.168.120.0/24 gw 192.168.120.1 dev enp0s7
參數(shù)說明
-net 設(shè)置到某個(gè)網(wǎng)段的路由
-host 設(shè)置到某臺(tái)主機(jī)的路由
gw 出口網(wǎng)關(guān) IP地址
dev 出口網(wǎng)關(guān) 物理設(shè)備名
使用 ip 指令# 推薦使用 replace 指令$ ip route replace 192.168.100.0/24 via 192.168.100.1 dev enp0s5 onlink$ ip route replace 192.168.110.0/24 via 192.168.110.1 dev enp0s6 onlink$ ip route replace 192.168.120.0/24 via 192.168.120.1 dev enp0s7 onlink# 直接使用 add 指令,會(huì)報(bào) RTNETLINK answers: File exists 錯(cuò)。如果要使用 add 指令,可先刪除原默認(rèn)的路由規(guī)則后再增加。$ ip route del 192.168.100.0/24$ ip route add 192.168.100.0/24 via 192.168.100.1 dev enp0s5 onlink
注意:一塊網(wǎng)卡只能設(shè)置一個(gè)網(wǎng)關(guān),多個(gè)網(wǎng)關(guān)會(huì)發(fā)生沖突而無法成功配置。
如需增加默認(rèn)路由,可使用以下指令:
使用 route 指令$ route add default gw 192.168.100.1 dev enp0s5
使用 ip 指令$ ip route add default via 192.168.100.1 dev enp0s5
如有多余的配置,可使用下面的命令進(jìn)行刪除路由。
使用 route 指令$ route del -net 192.168.100.0/24 gw 192.168.100.1或者$ route del -net 192.168.100.0/24 dev enp0s5
使用 ip 指令$ ip route del 192.168.100.0/24 參考文檔
http://www.google.com
http://www.cnblogs.com/fengyc/p/6533112.html
https://github.com/ttop5/ttop5.github.io/issues/11
http://longwind.blog.51cto.com/419072/806302
http://blog.csdn.net/moreorless/article/details/5397427
http://memoryboxes.github.io/blog/2014/12/30/linuxshuang-wang-qia-shuang-lu-you-she-zhi/
如果你覺得內(nèi)容很贊,還等什么?快快長(zhǎng)按打賞吧,iOS的土豪們也是可以的喲!
責(zé)任編輯:
總結(jié)
以上是生活随笔為你收集整理的linux两个网段默认网关_Linux下配置多网卡多网关的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手机 滑动_真的滑动屏,华为手机柔性屏新
- 下一篇: oracle no space left