介紹
在管理 Linux 服務器和排查網絡問題時,熟悉一些基本的網絡工具是很有幫助的。這些工具中的一部分最初是為了查看網絡狀態而編寫的,但其中也包含了一些可以用來管理和配置網絡連接的底層工具。 一直以來,這些互不相關的網絡工具被打包在一起發布,它們被統稱為net-tools。
雖然net-tools工具包提供了相當完善的功能,但是包內工具的開發卻是相互獨立的,它們的使用方式也各不相同。 由于net-tools包內工具的使用方式大相徑庭,并且包內的部分工具也已經停止維護,因此使用名為iproute2的新工具包來替換原來net-tools。
iproute2包內的各個工具被統一開發維護,并且他們之間的使用方式也非常相似。另外,這些工具也可以很好地互相配合一起使用。 在本篇文章中,我們將會討論如何使用iproute2來對你的網絡進行配置、維護和信息查看。我們將會使用 Ubuntu 12.04 VPS 來進行演示,不過大多數其它現代 Linux 發行版都提供了相同的功能。 雖然查詢指令可以在非特權模式(非 root)下執行,不過在修改網絡配置時,大多數情況下還是需要 root 權限的。
如何查看網絡接口、地址、路由
iproute2 工具包最基礎的功能就是管理本機的網絡接口。
一般來說,本機的網絡接口通常會被命名成像是eth0,eth1,lo這樣的名稱。在過去,常常使用net-tools包提供的ifconfig命令來配置網絡接口。而使用iproute2時,通常可以使用子命令ip addr和ip link來完成相同的功能。
使用 ifconfig 時,你可以通過輸入不帶參數的如下命令來查看本機當前所有網絡接口的狀態:
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)
如果想要查看某個特定網絡接口的信息,你可以將網絡接口名稱作為參數傳給 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 包提供的子命令,我們可以實現相同的功能。
如果想要查看每個網絡接口被配置的地址,可以輸入不帶參數的 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>
如果想要查看某個特定網絡接口的地址信息,你可以使用如下格式的命令:
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>
事實上,ip addr只是ip addr show命令的別名。
如果你只關心網絡接口本身,而不在意它們被配置的地址,那么你可以使用 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>
如果想要查看某個特定網絡接口的信息,那么你可以添加關鍵字 show 和對應網絡接口的名字:
ip link show eth0
如果想要獲得網絡接口如何通信的統計數據,那么你可以給link子命令傳入-s選項:
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>
那么我們如何找到我們的路由表呢?路由表包含了到達其他網絡地址的路徑信息,我們可以通過輸入以下內容來打印當前的路由表:
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
這條命令的輸出內容告訴我們,通往更大互聯網的默認路由是通過 eth0 接口到達地址為 107.170.58.1 的網關。通過 eth0 接口可以訪問地址為 107.170.58.1 的網關,并且 eth0 接口自身的 ip 地址是 107.170.58.162。
歡迎關注公眾號:網絡工程師阿龍!某音搜索網絡工程師阿龍!
如何配置網絡接口和地址
既然你已經熟悉了如何獲取網絡接口信息和與它們關聯的地址信息,那么下一步就應該是了解如何修改網絡接口的狀態了。
首先需要了解如何配置接口本身。你仍然可以使用 ip link 子命令,不過這次你需要傳入set而不是show來修改配置。
例如,我們可以通過使用以下命令來打開或關閉網絡接口:
ip link set eth1 up ip link set eth1 down
注意:當心不要意外關閉了你正連接的 VPS 的網絡接口!
你也可以使用 ip link 子命令來配置網絡接口的屬性。比如,如果你想打開或關閉網絡接口的多播標志,你可以輸入:
ip link set eth1 multicast on ip link set eth1 multicast off
你也可以輸入如下的命令來修改 MTU 和分組隊列的長度:
ip link set eth1 mtu 1500 iplinkseteth1txqueuelen1000
如果你正配置的網絡接口是關閉(down)狀態,那么你可以修改網絡接口的名稱和與之關聯的 arp 標志:
ip link set eth1 name eth10 ip link set eth1 arp on
如果要修改網絡接口的地址,那么我們可以再次使用 ip addr 子命令。
通過輸入以下命令我們可以為網絡接口添加一個地址:
ip addr add IPADDRESS/NETPREFIX brd + dev INTERFACE
該命令的brd +部分會自動設置廣播地址。每個網絡接口都可以添加多個地址而不會出現任何問題。
我們也可以執行相反的操作來刪除網絡地址。要刪除指定網絡接口的某個地址,可以使用如下命令:
歡迎關注公眾號:網絡工程師阿龍!某音搜索網絡工程師阿龍!
ip addr del IPADDRESS/NETPREFIX dev INTERFACE
你也可以省略輸入地址,這樣與該網絡接口關聯的第一個被列出的地址將被刪除。
通過使用 ip route [add | change | replace | delete ] 語法,你也可以刪除路由規則。但我們不會在這里介紹,因為大多數人不會定期對此進行調整。
IpRoute2 的其他功能
IPRoute2 還具有一些其他功能,不過我們將不會在本教程中進行深入討論。相反,我們將討論這些是什么,以及在什么情況下你可能會發現它們有用。 IP 路由規則(rule)的概念很難談論,因為它非常依賴于具體的情況。基本上,你可以基于多個字段(包括目標地址,源地址,路由協議,數據包大小等)來決定如何路由流量。 我們使用 ip rule 子命令使用此功能。基本查詢命令遵循和其他子命令一樣的語法:
ip rule show
0: from all lookup local 32766: from all lookup main 32767: from all lookup default這三條路由規則是內核配置的默認規則。第一行可以匹配任何流量,用于路由高優先級的流量。第二行是處理常規路由的主要規則。最后一行是空規則,如果上面的規則與數據包不匹配,則使用該行進行后處理(post-processing)。 由 IPRoute2 配置的路由規則被存儲在路由策略數據庫(routing policy database)中。通過與規則集合進行匹配來選擇該數據庫中的路由策略。我們可以使用適當的操作來添加或刪除規則。但是,你不應該在不知道自己在做什么的情況下執行這些操作。 可以通過man查看 ip rule 的手冊來進行進一步的學習。
man ip # search for "ip rule"
我們將簡要討論的另一件事是通過這些工具來處理 arp 信息。處理這些信息的子命令被稱作 ip neigh。
ip neigh
107.170.58.1 dev eth0 lladdr 005e01:68 DELAY
默認情況下,這里至少應列出你的網關。ARP(Address Resolution Protocol)是地址解析協議的縮寫,它可以通過 IP 地址來獲取 MAC 地址。 基本上,每當需要轉發 IP 分組時,你的主機就會在本地網絡上廣播 ARP 請求,向網絡中的其他主機詢問誰擁有這個 IP 地址。擁有這個 IP 地址的主機將把自己的 MAC 地址回復給詢問者,然后詢問者就知道該把 IP 分組發給誰了。詢問者會把 IP 地址到 MAC 地址的映射緩存到本地(一般持續 15 分鐘),這樣后續的分組在需要轉發時就不需要再次通過 ARP 請求詢問了。
結語
現在,你應該對如何使用 iproute2 包中的工具有了一個很好的了解了。
盡管許多指南和教程仍然引用舊的 net-tools 工具包,部分原因是有經驗的系統管理員過去經常使用舊的工具包,但本指南中討論的命令將在未來幾年內逐步替代 net-tools 工具。
重要的是,現在你必須熟悉這些命令,然后才能在已切換到這些命令的系統上解決網絡問題(Arch Linux 早在 2011 年就已經完全切換到了新工具)。新工具用法更加一致,你可以指望在所有命令中都可以使用類似的用法。你使用這些命令的次數越多,它們對你而言就越自然。
審核編輯:劉清
-
Linux系統
+關注
關注
4文章
594瀏覽量
27414 -
路由器
+關注
關注
22文章
3733瀏覽量
113902 -
vps
+關注
關注
1文章
110瀏覽量
12033
原文標題:都2023年了,別再用ifconfig啦! 趕緊試試這個吧!
文章出處:【微信號:網絡工程師筆記,微信公眾號:網絡工程師筆記】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論