Centos7之後修改網路設定變得比較麻煩一點,此篇介紹使用nmcli指令的方法
nmcli 是 network manager 服務的指令,有別於可使用的console圖形化介面nmtui 提供的設定方式,nmcli更困難。
此文著重在ipv4的設定上,ipv6的請參考這篇[Centos8] 利用nmcli 設定ipv6 位址@新精讚。
nmtui 文字圖形介面
這個程式執行後,可直接使用鍵盤設定網路的參數
IPv4直接設定就可以,算是非常簡單的方式。
以上有提供啟動網路的服務,如果你是在遠端的話,請不要使用他提供的功能來啟動,因為他一啟動就會斷線。
nmcii 文字介面
查看自己的網路介面
# ip addr
或是使用nmcli指令,nmcli指令也和大部分的網管指令一樣,可以偷懶省略,例如 device 可以省略為 dev。
# nmcli
# nmcli dev show
# nmcli dev sh
GENERAL.DEVICE: ens160 <== 設備名稱
GENERAL.TYPE: ethernet
GENERAL.HWADDR: 00:50:56:BA:1B:99 <== MAC
GENERAL.MTU: 1500
GENERAL.STATE: 100 (connected)
GENERAL.CONNECTION: ens160
GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2
WIRED-PROPERTIES.CARRIER: on
IP4.ADDRESS[1]: 163.17.38.99/24 <== IPv4的位址
IP4.GATEWAY: 163.17.38.250 <== 預設閘道
IP4.ROUTE[1]: dst = 163.17.38.0/24, nh = 0.0.0.0, mt = 100
IP4.ROUTE[2]: dst = 0.0.0.0/0, nh = 163.17.38.250, mt = 100
IP4.DNS[1]: 8.8.8.8 <== IPv6DNS
IP6.ADDRESS[1]: 2001:288:5400:2::99/64 <== 手動設定的 IPv6 位址
IP6.ADDRESS[2]: 2001:288:5400:2:723a:859c:57c4:3fac/64 <== AUTOCONF 的IPv6 位址
IP6.ADDRESS[3]: fe80::2874:105d:1af5:54c1/64 <==link local IPv6 位址
IP6.GATEWAY: 2001:288:5400:2::ff <== IPv6 閘道
IP6.ROUTE[1]: dst = 2001:288:5400:2::/64, nh = ::, mt = 100
IP6.ROUTE[2]: dst = fe80::/64, nh = ::, mt = 100
IP6.ROUTE[3]: dst = ff00::/8, nh = ::, mt = 256, table=255
IP6.ROUTE[4]: dst = ::/0, nh = 2001:288:5400:2::ff, mt = 100
IP6.DNS[1]: 2001:288:5400::3
GENERAL.DEVICE: lo
GENERAL.TYPE: loopback
GENERAL.HWADDR: 00:00:00:00:00:00
GENERAL.MTU: 65536
GENERAL.STATE: 10 (unmanaged)
GENERAL.CONNECTION: --
GENERAL.CON-PATH: --
IP4.ADDRESS[1]: 127.0.0.1/8
IP4.GATEWAY: --
IP6.ADDRESS[1]: ::1/128
IP6.GATEWAY: --
IP6.ROUTE[1]: dst = ::1/128, nh = ::, mt = 256
# nmcli conn show
NAME UUID TYPE DEVICE
ens160 74a87082-a4d1-383c-b950-eebb8a5849ba ethernet ens160
重啟網卡介面
# systemctl restart network X Centos8沒有作用
Failed to restart network.service: Unit network.service not found.
# systemctl restart NetworkManager.service ▲ Centos8可能沒有作用
<沒有任何輸出>
以下是可行的方法
Connection 'ens160' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2) <== 數字會一直累加
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)
ens160是設備名稱,而且down/up兩個指令得一起用,以免在遠方就斷線了。
設定 ipv4 位址
以device ens160為例
新增一個位址
移除一個位址
修改一個位址
注意事項
1. 沒有使用'+'的話,這會修改第1個記錄,也就是 ip4.address[1]這一個,
如果要指定修改第2個位址,請先移除第2個再新增
2. 如果設定沒帶'+'號也沒已設定的位址,則會新增一筆。
3. cidr的位址如果忽略prefix的話,預設會變成 /32請注意。例如
設定 ipv4 預設閘道GW
設定ipv6閘道使用 ipv4.gateway 這個類別
新增/修改閘道
移除閘道
注意事項
1. 預設閘道無法移除,所謂的移除只是把他清空
2. 預設閘道只能設定一個
3. 預設閘道不能帶cidr位址的prefix,換句話說,不能寫成 "ipv4位址/24"
4. 預設閘道設定完畢後要重啟網路才會生效
設定ipv4 DNS
設定dns使用 ipv4.dns 這個類別
新增
修改
刪除
注意事項
1. 修改會移除原本的,改成目前設定的
2. 設定後重啟網卡就消失,不必擔心,因為他把內容記錄到 /etc/resolv.conf 這裡,你也可以手動修改此檔,作用一樣。
結論
1. nmcli 直接設定直接生效,不必動啟網卡,預設匣道設定完要重啟網卡。
2. nmtui 設定完得重啟網路,設定上比較簡單
錯誤排除
1. Error: Reapplying connection to device 'ens160' (/org/freedesktop/NetworkManager/Devices/2) failed: The settings specified are invalid: ipv6.gateway: gateway cannot be set if there are no addresses configured
你已有設定預設閘道,所以一定要保留一個可用的IPv4位址
參考資料
[1] https://linuxconfig.org/rhel-8-configure-static-ip-address
[2] https://www.golinuxcloud.com/how-to-configure-ipv6-address-in-linux-rhel-centos-7/