Ubuntu 作為一個Linux的發行版,在桌面環境的易用性上做了很多改善,對推動Linux的推廣做了很大的貢獻。同時,它作為服務器的操作系統也越來越多的被使用。當然,服務器端可能更多的人在使用Redhat、CentOS等系統。Linux的發行版本很多,基本命令都差不多,但是一些系統配置上,也存在着各種各樣的差異。筆者結合Ubuntu的多年使用經驗,總結一下Ubuntu系統的一些配置要點。
1. 網絡的配置
Ubuntu在安裝過程中會自動尋找網絡連接並配置網絡IP等,但是好多情況下,安裝系統時不需要或不方便配置網絡。那么,等我們安裝完系統,就要先配好網絡才能繼續安裝、配置其它軟件。Ubuntu的網卡名稱在幾年前(大約14.04之前的版本)都是這樣命名的:
有線網卡為eth0(多個網卡序號增大:eth1, eth2…),無線網卡是wlan0。
但是到了16.04的版本,網卡的命名做了非常大的改動,名稱從eth0變為en開頭的,為什么改名呢?
可預測的網絡接口命名
自從 v197 systemd/udev 開始,系統可以為本地的Ethernet、WLAN和WWAN接口自動地分配可預測的、穩定的網絡接口名稱。該規范脫離了傳統的命名機制(eth0,eth1,wlan0等),但是修復了許多問題。
原因
在傳統的網絡接口命名規則下,是由內核簡單地從eth0開始為可被驅動探索到的設備分配名字(eht0,eth1…)。由於這些驅動不能夠被現在技術所預測,意味着多個網絡接口都可以被分配名為“eth0”、“eth1”這樣的名字,這種方式存在一種隱患,就是一種接口可能是以“eth0”啟動,但是結束時就變成了“eth1”.不可預測的命名規則存在着嚴重的安全威脅。 為了修復這個問題,許多方案被提出和實現。很長一段時間,udev都是根據Mac地址來分配永久了“ethX”名字。這導致了很多問題:這需要一個可寫的但是通常不允許的root目錄;由於系統的無邊界性,當root一個OS鏡像的時候可能會改變鏡像的配置信息;許多系統的Mac地址並不是固定的。其中最大的問題是用戶空間和系統內核對設備命名的沖突。 另一種解決方案就是“biosdevname”,該方案通過找到固件中固定的拓撲信息然后利用它們分配固定的接口。這個命名機制同/dev/*/by-path/ symlinks的方式很相似。大多數情況下,biosdevname 從底層的內核設備定位機制中分離了出來。 最后,許多觀點遲滯根據用戶選擇的名字對接口重新命名,切斷同Mac和物理位置的聯系。這是一個非常好的選擇,但是存在一個隱藏的問題就是用戶獲得了選擇和分配這些名字的權利。 我們相信由“biosdevname”機制已領的泛化機制是一個很好的選擇。基於固件、拓撲和位置信息分配固定的名字有一個巨大的優勢,名字是全自動地、可預測的,即使硬件添加或刪除也不影響。
V197添加了什么
systemd 197為許多命名策略新增了許多本地化的支持到 systemd/udevd 並實現了一個類似於“biosdevname”的機制。五種網絡接口的命名機制通過udev得到了支持。
/* * Two character prefixes based on the type of interface: * en — Ethernet * sl — serial line IP (slip) * wl — wlan * ww — wwan * * Type of names: * b — BCMA bus core number * c — CCW bus group name, without leading zeros [s390] * o[d] — on-board device index number * s[f][d] — hotplug slot index number * x — MAC address * [P]ps[f][d] * — PCI geographical location * [P]ps[f][u][..][c][i] * — USB port number chain */
上面一段是systemd源碼的注釋,意思是:
en代表以太網卡
p3s0代表PCI接口的物理位置為(3, 0), 其中橫座標代表bus,縱座標代表slot
那么如何查看我的機器上的網卡名稱是什么呢?可以通過以下命令來查看:
ls /sys/class/net/ docker0 enp0s31f6 enx30b49e09b81e lo zt0
可以看到我的機器上有5個網卡設備。知道了網卡名稱就可以配置網絡IP了。這里,我們用vim編輯網絡配置文件:
vim /etc/network/interfaces
如果你的網絡是通過dhcp自動獲取IP,可以這樣編寫配置文件:
auto lo # 代表127.0.0.1,即localhost iface lo inet loopback auto enp0s31f6 # 這是網卡名稱 iface enp0s31f6 inet dhcp
如果你的網絡有靜態IP,則這樣編寫配置文件:
auto lo # 代表127.0.0.1,即localhost iface lo inet loopback auto enp0s31f6 # 這是網卡名稱 iface enp0s31f6 inet static address 10.1.40.240 gateway 10.1.40.254 netmask 255.255.255.0
如果你的網卡需要綁定多個IP,則增加的IP這樣寫:
auto enp0s31f6:0 # 這是虛擬出的網卡名稱,加了:0,如果有更多IP,可以:1, :2, ... iface enp0s31f6:0 inet static address 192.168.1.100 gateway 192.168.1.1 netmask 255.255.255.0
配置文件編輯完成后,重啟一下網絡,使配置生效:
sudo /etc/init.d/networking restart # 或者用service命令: sudo service networking restart
文章首發於我的技術博客猿人學的Python基礎教程