介紹
在管理 Linux 服務(wù)器和排查網(wǎng)絡(luò)問題時(shí),熟悉一些基本的網(wǎng)絡(luò)工具是很有幫助的。這些工具中的一部分最初是為了查看網(wǎng)絡(luò)狀態(tài)而編寫的,但其中也包含了一些可以用來管理和配置網(wǎng)絡(luò)連接的底層工具。 一直以來,這些互不相關(guān)的網(wǎng)絡(luò)工具被打包在一起發(fā)布,它們被統(tǒng)稱為net-tools。
雖然net-tools工具包提供了相當(dāng)完善的功能,但是包內(nèi)工具的開發(fā)卻是相互獨(dú)立的,它們的使用方式也各不相同。 由于net-tools包內(nèi)工具的使用方式大相徑庭,并且包內(nèi)的部分工具也已經(jīng)停止維護(hù),因此使用名為iproute2的新工具包來替換原來net-tools。
iproute2包內(nèi)的各個(gè)工具被統(tǒng)一開發(fā)維護(hù),并且他們之間的使用方式也非常相似。另外,這些工具也可以很好地互相配合一起使用。 在本篇文章中,我們將會(huì)討論如何使用iproute2來對(duì)你的網(wǎng)絡(luò)進(jìn)行配置、維護(hù)和信息查看。我們將會(huì)使用 Ubuntu 12.04 VPS 來進(jìn)行演示,不過大多數(shù)其它現(xiàn)代 Linux 發(fā)行版都提供了相同的功能。 雖然查詢指令可以在非特權(quán)模式(非 root)下執(zhí)行,不過在修改網(wǎng)絡(luò)配置時(shí),大多數(shù)情況下還是需要 root 權(quán)限的。
如何查看網(wǎng)絡(luò)接口、地址、路由
iproute2 工具包最基礎(chǔ)的功能就是管理本機(jī)的網(wǎng)絡(luò)接口。
一般來說,本機(jī)的網(wǎng)絡(luò)接口通常會(huì)被命名成像是eth0,eth1,lo這樣的名稱。在過去,常常使用net-tools包提供的ifconfig命令來配置網(wǎng)絡(luò)接口。而使用iproute2時(shí),通??梢允褂米用頸p addr和ip link來完成相同的功能。
使用 ifconfig 時(shí),你可以通過輸入不帶參數(shù)的如下命令來查看本機(jī)當(dāng)前所有網(wǎng)絡(luò)接口的狀態(tài):
ifconfig
eth0Linkencap:EthernetHWaddr54f7c2:1b inetaddr:192.168.56.126Bcast:192.168.56.255Mask:255.255.255.0 inet6addr:fe80:f7ffc21b/64Scope:Link UPBROADCASTRUNNINGMULTICASTMTU:1500Metric:1 RXpackets:114273errors:0dropped:0overruns:0frame:0 TXpackets:58866errors:0dropped:0overruns:0carrier:0 collisions:0txqueuelen:1000 RXbytes:73490903(73.4MB)TXbytes:14294252(14.2MB) Interrupt:20Memory:f7f00000-f7f20000 loLinkencap:LocalLoopback inetaddr:127.0.0.1Mask:255.0.0.0 inet6addr:::1/128Scope:Host UPLOOPBACKRUNNINGMTU:65536Metric:1 RXpackets:3942errors:0dropped:0overruns:0frame:0 TXpackets:3942errors:0dropped:0overruns:0carrier:0 collisions:0txqueuelen:0 RXbytes:668121(668.1KB)TXbytes:668121(668.1KB)
如果想要查看某個(gè)特定網(wǎng)絡(luò)接口的信息,你可以將網(wǎng)絡(luò)接口名稱作為參數(shù)傳給 ifconfig:
ifconfig eth0
eth0 Link encap:Ethernet HWaddr 54f7c2:1b inet addr:192.168.56.126 Bcast:192.168.56.255 Mask:255.255.255.0 inet6 addr: fe80:f7ffc21b/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:114273 errors:0 dropped:0 overruns:0 frame:0 TX packets:58866 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:73490903 (73.4 MB) TX bytes:14294252 (14.2 MB) Interrupt:20 Memory:f7f00000-f7f20000
使用 iproute2 包提供的子命令,我們可以實(shí)現(xiàn)相同的功能。
如果想要查看每個(gè)網(wǎng)絡(luò)接口被配置的地址,可以輸入不帶參數(shù)的 ip addr 命令:
ip addr
1: lo: mtu 65536 qdisc noqueue state UNKNOWN link/loopback 000000:00 brd 000000:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 54f7c2:1b brd ffffff:ff inet 192.168.56.126/24 brd 192.168.56.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80:f7ffc21b/64 scope link valid_lft forever preferred_lft forever,multicast,up,lower_up>,up,lower_up>
如果想要查看某個(gè)特定網(wǎng)絡(luò)接口的地址信息,你可以使用如下格式的命令:
ip addr show eth0
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 54f7c2:1b brd ffffff:ff inet 192.168.56.126/24 brd 192.168.56.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80:f7ffc21b/64 scope link valid_lft forever preferred_lft forever,multicast,up,lower_up>
事實(shí)上,ip addr只是ip addr show命令的別名。
如果你只關(guān)心網(wǎng)絡(luò)接口本身,而不在意它們被配置的地址,那么你可以使用 ip link 子命令:
ip link
1: lo: mtu 65536 qdisc noqueue state UNKNOWN link/loopback 000000:00 brd 000000:00 2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 0413a2:01 brd ffffff:ff,multicast,up,lower_up>,up,lower_up>
如果想要查看某個(gè)特定網(wǎng)絡(luò)接口的信息,那么你可以添加關(guān)鍵字 show 和對(duì)應(yīng)網(wǎng)絡(luò)接口的名字:
ip link show eth0
如果想要獲得網(wǎng)絡(luò)接口如何通信的統(tǒng)計(jì)數(shù)據(jù),那么你可以給link子命令傳入-s選項(xiàng):
ip -s link show eth0
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 0413a2:01 brd ffffff:ff RX: bytes packets errors dropped overrun mcast 853144 14672 0 0 0 0 TX: bytes packets errors dropped carrier collsns 91257 537 0 0 0 0,multicast,up,lower_up>
那么我們?nèi)绾握业轿覀兊穆酚杀砟??路由表包含了到達(dá)其他網(wǎng)絡(luò)地址的路徑信息,我們可以通過輸入以下內(nèi)容來打印當(dāng)前的路由表:
ip route show
default via 107.170.58.1 dev eth0 metric 100 107.170.58.0/24 dev eth0 proto kernel scope link src 107.170.58.162
這條命令的輸出內(nèi)容告訴我們,通往更大互聯(lián)網(wǎng)的默認(rèn)路由是通過 eth0 接口到達(dá)地址為 107.170.58.1 的網(wǎng)關(guān)。通過 eth0 接口可以訪問地址為 107.170.58.1 的網(wǎng)關(guān),并且 eth0 接口自身的 ip 地址是 107.170.58.162。
歡迎關(guān)注公眾號(hào):網(wǎng)絡(luò)工程師阿龍!某音搜索網(wǎng)絡(luò)工程師阿龍!
如何配置網(wǎng)絡(luò)接口和地址
既然你已經(jīng)熟悉了如何獲取網(wǎng)絡(luò)接口信息和與它們關(guān)聯(lián)的地址信息,那么下一步就應(yīng)該是了解如何修改網(wǎng)絡(luò)接口的狀態(tài)了。
首先需要了解如何配置接口本身。你仍然可以使用 ip link 子命令,不過這次你需要傳入set而不是show來修改配置。
例如,我們可以通過使用以下命令來打開或關(guān)閉網(wǎng)絡(luò)接口:
ip link set eth1 up ip link set eth1 down
注意:當(dāng)心不要意外關(guān)閉了你正連接的 VPS 的網(wǎng)絡(luò)接口!
你也可以使用 ip link 子命令來配置網(wǎng)絡(luò)接口的屬性。比如,如果你想打開或關(guān)閉網(wǎng)絡(luò)接口的多播標(biāo)志,你可以輸入:
ip link set eth1 multicast on ip link set eth1 multicast off
你也可以輸入如下的命令來修改 MTU 和分組隊(duì)列的長(zhǎng)度:
ip link set eth1 mtu 1500 iplinkseteth1txqueuelen1000
如果你正配置的網(wǎng)絡(luò)接口是關(guān)閉(down)狀態(tài),那么你可以修改網(wǎng)絡(luò)接口的名稱和與之關(guān)聯(lián)的 arp 標(biāo)志:
ip link set eth1 name eth10 ip link set eth1 arp on
如果要修改網(wǎng)絡(luò)接口的地址,那么我們可以再次使用 ip addr 子命令。
通過輸入以下命令我們可以為網(wǎng)絡(luò)接口添加一個(gè)地址:
ip addr add IPADDRESS/NETPREFIX brd + dev INTERFACE
該命令的brd +部分會(huì)自動(dòng)設(shè)置廣播地址。每個(gè)網(wǎng)絡(luò)接口都可以添加多個(gè)地址而不會(huì)出現(xiàn)任何問題。
我們也可以執(zhí)行相反的操作來刪除網(wǎng)絡(luò)地址。要?jiǎng)h除指定網(wǎng)絡(luò)接口的某個(gè)地址,可以使用如下命令:
歡迎關(guān)注公眾號(hào):網(wǎng)絡(luò)工程師阿龍!某音搜索網(wǎng)絡(luò)工程師阿龍!
ip addr del IPADDRESS/NETPREFIX dev INTERFACE
你也可以省略輸入地址,這樣與該網(wǎng)絡(luò)接口關(guān)聯(lián)的第一個(gè)被列出的地址將被刪除。
通過使用 ip route [add | change | replace | delete ] 語法,你也可以刪除路由規(guī)則。但我們不會(huì)在這里介紹,因?yàn)榇蠖鄶?shù)人不會(huì)定期對(duì)此進(jìn)行調(diào)整。
IpRoute2 的其他功能
IPRoute2 還具有一些其他功能,不過我們將不會(huì)在本教程中進(jìn)行深入討論。相反,我們將討論這些是什么,以及在什么情況下你可能會(huì)發(fā)現(xiàn)它們有用。 IP 路由規(guī)則(rule)的概念很難談?wù)?,因?yàn)樗浅R蕾囉诰唧w的情況?;旧?,你可以基于多個(gè)字段(包括目標(biāo)地址,源地址,路由協(xié)議,數(shù)據(jù)包大小等)來決定如何路由流量。 我們使用 ip rule 子命令使用此功能?;静樵兠钭裱推渌用钜粯拥恼Z法:
ip rule show
0: from all lookup local 32766: from all lookup main 32767: from all lookup default這三條路由規(guī)則是內(nèi)核配置的默認(rèn)規(guī)則。第一行可以匹配任何流量,用于路由高優(yōu)先級(jí)的流量。第二行是處理常規(guī)路由的主要規(guī)則。最后一行是空規(guī)則,如果上面的規(guī)則與數(shù)據(jù)包不匹配,則使用該行進(jìn)行后處理(post-processing)。 由 IPRoute2 配置的路由規(guī)則被存儲(chǔ)在路由策略數(shù)據(jù)庫(routing policy database)中。通過與規(guī)則集合進(jìn)行匹配來選擇該數(shù)據(jù)庫中的路由策略。我們可以使用適當(dāng)?shù)牟僮鱽硖砑踊騽h除規(guī)則。但是,你不應(yīng)該在不知道自己在做什么的情況下執(zhí)行這些操作。 可以通過man查看 ip rule 的手冊(cè)來進(jìn)行進(jìn)一步的學(xué)習(xí)。
man ip # search for "ip rule"
我們將簡(jiǎn)要討論的另一件事是通過這些工具來處理 arp 信息。處理這些信息的子命令被稱作 ip neigh。
ip neigh
107.170.58.1 dev eth0 lladdr 005e01:68 DELAY
默認(rèn)情況下,這里至少應(yīng)列出你的網(wǎng)關(guān)。ARP(Address Resolution Protocol)是地址解析協(xié)議的縮寫,它可以通過 IP 地址來獲取 MAC 地址。 基本上,每當(dāng)需要轉(zhuǎn)發(fā) IP 分組時(shí),你的主機(jī)就會(huì)在本地網(wǎng)絡(luò)上廣播 ARP 請(qǐng)求,向網(wǎng)絡(luò)中的其他主機(jī)詢問誰擁有這個(gè) IP 地址。擁有這個(gè) IP 地址的主機(jī)將把自己的 MAC 地址回復(fù)給詢問者,然后詢問者就知道該把 IP 分組發(fā)給誰了。詢問者會(huì)把 IP 地址到 MAC 地址的映射緩存到本地(一般持續(xù) 15 分鐘),這樣后續(xù)的分組在需要轉(zhuǎn)發(fā)時(shí)就不需要再次通過 ARP 請(qǐng)求詢問了。
結(jié)語
現(xiàn)在,你應(yīng)該對(duì)如何使用 iproute2 包中的工具有了一個(gè)很好的了解了。
盡管許多指南和教程仍然引用舊的 net-tools 工具包,部分原因是有經(jīng)驗(yàn)的系統(tǒng)管理員過去經(jīng)常使用舊的工具包,但本指南中討論的命令將在未來幾年內(nèi)逐步替代 net-tools 工具。
重要的是,現(xiàn)在你必須熟悉這些命令,然后才能在已切換到這些命令的系統(tǒng)上解決網(wǎng)絡(luò)問題(Arch Linux 早在 2011 年就已經(jīng)完全切換到了新工具)。新工具用法更加一致,你可以指望在所有命令中都可以使用類似的用法。你使用這些命令的次數(shù)越多,它們對(duì)你而言就越自然。
審核編輯:劉清
-
Linux系統(tǒng)
+關(guān)注
關(guān)注
4文章
595瀏覽量
27449 -
路由器
+關(guān)注
關(guān)注
22文章
3738瀏覽量
114129 -
vps
+關(guān)注
關(guān)注
1文章
110瀏覽量
12035
原文標(biāo)題:都2023年了,別再用ifconfig啦! 趕緊試試這個(gè)吧!
文章出處:【微信號(hào):網(wǎng)絡(luò)工程師筆記,微信公眾號(hào):網(wǎng)絡(luò)工程師筆記】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論