1、環境和知識預備html
我遇到問題的生產機器是CentOS release 6.8系統,不過這並不影響問題的解決,本質上都是同樣的。服務器
網關:一個網絡鏈接到另外一個網絡的關口,也就是實現網絡互連,俗稱網絡鏈接器。網絡
DNS:域名解析服務器,是把網址變成IP地址的服務器。app
上網流程大體以下:dom
服務器IP <--> 對應的網關 <--> 網絡tcp
也就是說網關做爲一箇中介,若是沒有對應的網關,那麼是沒法進行正確通訊、上網的。大數據
2、問題介紹spa
通常咱們在像運營商申請專線寬帶的時候,運營商都會提供【IP、網關、掩碼、DNS地址】這些基本的網卡配置信息。若是隻有一張網卡,那麼基本是沒有問題的,這也是很常見的一個配置步驟。rest
一、獲取網卡名,底下表紅色的就是對應的網卡名稱,打馬賽克的位置就是分配的公網地址(ipv4),inet表示ipv4地址,inet6表示ipv6的地址。code
二、切換到/etc/sysconfig/network-scripts目錄下,把配置寫到對應的網卡配置文件中,文件名是【ifcfg-網卡名稱】,個人這邊是ifcfg-em1。
三、修改配置以下:
1 DEVICE=ens33 #網卡名稱 2 HWADDR=14:18:77:3B:6F:01 #MAC地址 3 TYPE=Ethernet #網卡類型 4 UUID=314d1b96-70b2-498a-8711-6cb5ab264464 #惟一標識 5 ONBOOT=yes #開機激活 6 BOOTPROTO=static #網卡獲取IP地址的方式,通常有【none,dhcp,static】這些,dhcp是自動獲取IP的,其餘都是固定的 7 IPADDR=100.196.184.188 #IP地址,若是BOOTPROTO=dhcp選擇動態獲取IP的話,那麼這裏就不須要配置IP。 8 GATEWAY=100.196.184.19 #默認網關地址!!! 9 NETMASK=255.255.255.248 #掩碼 10 DNS1=51.136.192.6 #默認主DNS地址 11 DNS2=50.196.165.2 #默認備DNS地址,後面能夠繼續遞增列下去,DNS3,DNS4 12 NM_CONTROLLED=no #網卡是否容許用 NetworkManager 程序管理,使用於非服務器 13 MTU=9000 #網絡上傳送的最大數據包
四、單網卡狀況下,你這麼一配置,重啓一下網絡服務。【service network restart】或者【systemctl network restart】運行一下就能夠了。
由於就一張網卡,無論你配置的是全局仍是局部,都能生效,沒有衝突問題。
若是有多張網卡,那麼就會出現衝突問題了。衝突的緣由是GATEWAY和DNS的配置,這兩個配置的表示默認的地址。多張網卡的配置ifcfg-em1,ifcfg-em2,ifcfg-em3...,後面的配置就會把前面的配置直接進行覆蓋操做。啥意思呢?就是em1的網關是A,em2的網關是B,啓動的時候系統會去讀取這些配置文件的信息,加載em1的配置時,默認網關是A;接着,加載em2的配置時,默認網關變成了B。這樣A的IP就走不通了。
因此在有多個網卡的狀況,不該該只使用一個默認的網關來實現通訊,由於不一樣網卡的網關不同會致使一部分網卡因爲網關不適用致使不能使用的狀況。
3、問題解決
咱們能夠經過爲每一個網卡配置單獨的規則來實現通訊,em1對應網關A,em2對應網關B,em3對應網關C...這樣每一個網卡都選擇正確本身的網關,就不會有默認網關帶來的衝突問題了。如何操做?請看下面:
首先要知道Linux攜帶了本身的路由配置的一些命令。
ip rule和ip route: ip rule是用來管理路由規則的,ip route是管理路由表的,底下是這兩個的一些參數配置,有興趣的能夠看看,沒興趣的直接跳過下面這個代碼段。
Usage: ip rule [ list | add | del | flush ] SELECTOR ACTION SELECTOR := [ not ] [ from PREFIX ] [ to PREFIX ] [ tos TOS ] [ fwmark FWMARK[/MASK] ] [ dev STRING ] [ pref NUMBER ] ACTION := [ table TABLE_ID ] [ realms [SRCREALM/]DSTREALM ] [ goto NUMBER ] TABLE_ID := [ local | main | default | NUMBER ] Usage: ip route { list | flush } SELECTOR ip route get ADDRESS [ from ADDRESS iif STRING ] [ oif STRING ] [ tos TOS ] ip route { add | del | change | append | replace | monitor } ROUTE SELECTOR := [ root PREFIX ] [ match PREFIX ] [ exact PREFIX ] [ table TABLE_ID ] [ proto RTPROTO ] [ type TYPE ] [ scope SCOPE ] ROUTE := NODE_SPEC [ INFO_SPEC ] NODE_SPEC := [ TYPE ] PREFIX [ tos TOS ] [ table TABLE_ID ] [ proto RTPROTO ] [ scope SCOPE ] [ metric METRIC ] INFO_SPEC := NH OPTIONS FLAGS [ nexthop NH ]... NH := [ via ADDRESS ] [ dev STRING ] [ weight NUMBER ] NHFLAGS OPTIONS := FLAGS [ mtu NUMBER ] [ advmss NUMBER ] [ rtt TIME ] [ rttvar TIME ] [reordering NUMBER ] [ window NUMBER] [ cwnd NUMBER ] [ initcwnd NUMBER ] [ ssthresh NUMBER ] [ realms REALM ] [ src ADDRESS ] [ rto_min TIME ] [ hoplimit NUMBER ] [ initrwnd NUMBER ] TYPE := [ unicast | local | broadcast | multicast | throw | unreachable | prohibit | blackhole | nat ] TABLE_ID := [ local | main | default | all | NUMBER ] SCOPE := [ host | link | global | NUMBER ] FLAGS := [ equalize ] MP_ALGO := { rr | drr | random | wrandom } NHFLAGS := [ onlink | pervasive ] RTPROTO := [ kernel | boot | static | NUMBER ] TIME := NUMBER[s|ms]
一、切換到/etc/sysconfig/network-scripts目錄下,把配置寫到對應的網卡配置文件中,文件名是【ifcfg-網卡名稱】。
二、修改配置以下(不須要再配置GATEWAY):
if-ens33網卡配置文件
DEVICE=ens33 #網卡名稱 HWADDR=14:18:77:3B:6F:01 #MAC地址 TYPE=Ethernet #網卡類型 UUID=314d1b96-70b2-498a-8711-6cb5ab264464 #惟一標識 ONBOOT=yes #開機激活 BOOTPROTO=static #網卡獲取IP地址的方式,通常有【none,dhcp,static】這些,dhcp是自動獲取IP的,其餘都是固定的 IPADDR=100.196.184.188 #IP地址,若是BOOTPROTO=dhcp選擇動態獲取IP的話,那麼這裏就不須要配置IP。 ####GATEWAY=100.196.184.19 #默認網關地址!!! NETMASK=255.255.255.248 #掩碼 DNS1=51.136.192.6 #默認主DNS地址 DNS2=50.196.165.2 #默認備DNS地址,後面能夠繼續遞增列下去,DNS3,DNS4 NM_CONTROLLED=no #網卡是否容許用 NetworkManager 程序管理,使用於非服務器 MTU=9000 #網絡上傳送的最大數據包
if-ens34網卡配置文件
DEVICE=ens33 #網卡名稱
HWADDR=14:18:77:3B:6F:02 #MAC地址 TYPE=Ethernet #網卡類型 UUID=314d1b96-70b2-498a-8711-6cb11b264464 #惟一標識 ONBOOT=yes #開機激活 BOOTPROTO=static #網卡獲取IP地址的方式,通常有【none,dhcp,static】這些,dhcp是自動獲取IP的,其餘都是固定的 IPADDR=88.196.184.188 #IP地址,若是BOOTPROTO=dhcp選擇動態獲取IP的話,那麼這裏就不須要配置IP。 ####GATEWAY=88.196.184.19 #默認網關地址!!! NETMASK=255.255.255.248 #掩碼 DNS1=51.136.192.6 #默認主DNS地址 DNS2=50.196.165.2 #默認備DNS地址,後面能夠繼續遞增列下去,DNS3,DNS4 NM_CONTROLLED=no #網卡是否容許用 NetworkManager 程序管理,使用於非服務器 MTU=9000 #網絡上傳送的最大數據包
三、配置ens33的默認路由
【配置規則以下】:
ip rule add from 網卡IP table 表數字
ip route add default via 網關 dev 網卡名 table 表數字
配置ens33的路由規則(table後面的數字能夠本身取,若是衝突系統會提示已存在,換一個不存在的就好,能夠經過【ip rule show】命令查看已配置的內容)
ip rule add from 100.196.184.188 table 1
配置ens33的路由表(能夠經過【ip route show】命令查看已配置的內容)
ip route add default via 100.196.184.19 dev ens33 table 1
四、配置ens34的默認路由
配置ens34的路由規則(table後面的數字能夠本身取,若是衝突系統會提示已存在,換一個不存在的就好,能夠經過【ip rule show】命令查看已配置的內容)
ip rule add from 88.196.184.188 table 2
配置ens34的路由表(能夠經過【ip route show】命令查看已配置的內容)
ip route add default via 88.196.184.19 dev ens34 table 2
... 若是有多張繼續參照上訴步驟配置下去。
五、經過ping命令驗證
ping -I 網卡名或者IP www.baidu.com
若是正常的話就是成功了,不然檢查一下配置。若是配置錯誤,能夠經過對應的刪除命令清理規則,就是把命令的add改爲del。好比:
ip rule add from 88.196.184.188 table 2
對應的刪除操做是:
ip rule del from 88.196.184.188 table 2
4、總結
這就是我今天一個解決這個問題的一個過程,就是把【網卡使用默認的網關】修改爲【網卡本身使用單獨的一個路由規則】來實現多IP同時上網的問題。期間,能夠經過tcpdump命令,traceroute命令等來協助問題排查。這些命令比較簡單就不介紹啦。tcpdump命令能夠參照我以前寫的:
https://www.cnblogs.com/luozhuzhu/p/13405350.html
好了,今日分享到此結束,我們下期再會!謝謝你們的觀看!