前言
以前 Ubuntu 修改網路卡設定時大部分都是透過修改 /etc/network/interfaces
後執行 ifdownup
即可,Ubuntu 自 17.10 版後將預設的網路卡管理工具變更為 Netplan,設定檔內容採用 YAML 格式進行設定,風格上其實並沒有差太多,轉換過程中沒有什麼太大的問題,如果需要開發自動化管理系統,有 Netplan 的話應該是可以省下一些時間,Netplan 的導入個人是樂見其成。
系統升級後設定檔遺失
今天在工作時將一台 Ubuntu Server 從 16.04 升級到 18.04 後發現無法連線,估計是升級時不小心全部覆蓋,而系統升級後將舊的網路卡管理套件直接幹掉並切換到 Netplan,記得先前升級其他台 server 時系統會保留舊的設定,並不會自動切換過去,其實也還好就重新設定,但是系統有把 /etc/netplan
建好了,但是並沒有出現預設的 50-cloud-init.yaml
設定檔。
解決方式
把關鍵字餵狗後竟然找不到相關的文章(教學倒是一堆),除了照著網路上的範例設定照著 key 之外,還有一個方法可以嘗試。大部分套件在安裝時一定會有說明文件一同安裝進系統,透過 dpkg -L {套件名稱}
可以列出與套件有關的所有目錄與檔案路徑。
dpkg -L netplan.io
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
/.
/etc
/etc/netplan
/lib
/lib/netplan
/lib/netplan/generate
/lib/systemd
/lib/systemd/system
/lib/systemd/system/[email protected]
/lib/systemd/system-generators
/usr
/usr/sbin
/usr/share
/usr/share/bash-completion
/usr/share/bash-completion/completions
/usr/share/bash-completion/completions/netplan
/usr/share/doc
/usr/share/doc/netplan.io
/usr/share/doc/netplan.io/changelog.gz
/usr/share/doc/netplan.io/copyright
/usr/share/doc/netplan.io/examples
/usr/share/doc/netplan.io/examples/bonding.yaml
/usr/share/doc/netplan.io/examples/bonding_router.yaml
/usr/share/doc/netplan.io/examples/bridge.yaml
/usr/share/doc/netplan.io/examples/bridge_vlan.yaml
/usr/share/doc/netplan.io/examples/dhcp.yaml
/usr/share/doc/netplan.io/examples/direct_connect_gateway.yaml
/usr/share/doc/netplan.io/examples/loopback_interface.yaml
/usr/share/doc/netplan.io/examples/network_manager.yaml
/usr/share/doc/netplan.io/examples/source_routing.yaml
/usr/share/doc/netplan.io/examples/static.yaml
/usr/share/doc/netplan.io/examples/static_multiaddress.yaml
/usr/share/doc/netplan.io/examples/static_singlenic_multiip_multigateway.yaml
/usr/share/doc/netplan.io/examples/vlan.yaml
/usr/share/doc/netplan.io/examples/windows_dhcp_server.yaml
/usr/share/doc/netplan.io/examples/wireless.yaml
/usr/share/doc/netplan.io/netplan.html
/usr/share/man
/usr/share/man/man5
/usr/share/man/man5/netplan.5.gz
/usr/share/man/man8
/usr/share/man/man8/netplan-apply.8.gz
/usr/share/man/man8/netplan-generate.8.gz
/usr/share/man/man8/netplan-try.8.gz
/usr/share/netplan
/usr/share/netplan/netplan
/usr/share/netplan/netplan/__init__.py
/usr/share/netplan/netplan/cli
/usr/share/netplan/netplan/cli/__init__.py
/usr/share/netplan/netplan/cli/commands
/usr/share/netplan/netplan/cli/commands/__init__.py
/usr/share/netplan/netplan/cli/commands/apply.py
/usr/share/netplan/netplan/cli/commands/generate.py
/usr/share/netplan/netplan/cli/commands/ip.py
/usr/share/netplan/netplan/cli/commands/migrate.py
/usr/share/netplan/netplan/cli/commands/try_command.py
/usr/share/netplan/netplan/cli/core.py
/usr/share/netplan/netplan/cli/utils.py
/usr/share/netplan/netplan/configmanager.py
/usr/share/netplan/netplan/terminal.py
/usr/share/netplan/netplan.script
/lib/systemd/system-generators/netplan
/usr/sbin/netplan
|
可以看到在 /usr/share/doc/netplan.io/examples/
下有範例設定檔,直接 copy 一份比較符合需求的設定檔到 /etc/netplan
並修改即可。
1
|
sudo cp /usr/share/doc/netplan.io/examples/static.yaml /etc/netplan/50-cloud-init.yaml
|
記得先查詢你的網路卡介面名稱,然後修改範例設定檔中的網路卡名稱。查詢方式有三種
-
ip a
1
2
3
4
5
6
7
8
|
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00: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: ens160: mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:16:d4:1b brd ff:ff:ff:ff:ff:ff
|
-
networkctl
1
2
3
|
IDX LINK TYPE OPERATIONAL SETUP
1 lo loopback n/a unmanaged
2 ens160 ether n/a unmanaged
|
-
ifconfig -a
最廣為人知的指令,如果是舊系統升級應該都還可以使用,但如果是全新安裝的 Ubuntu 18 預設是沒有自帶的,這點需要注意。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
ens160: flags=4098 mtu 1500
ether 00:0c:29:16:d4:1b txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 416 bytes 26296 (26.2 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 416 bytes 26296 (26.2 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
|
改完後大概像這樣
1
2
3
4
5
6
7
8
9
10
|
network:
version: 2
renderer: networkd
ethernets:
ens160:
addresses:
- 192.168.2.160/24
gateway4: 192.168.2.1
nameservers:
addresses: [1.1.1.1, 8.8.8.8]
|
最後執行 sudo netplan apply
套用即可。