Ubuntu20.04網絡配置


Ubuntu20.04網絡配置

ubuntu新老版本、桌面版和服務器版在網絡配置方面主要存在以下三點區別:

  • 老版本的net-tools套件不再默認支持,取而代之的是iproute2套件。
  • 老版本的ifup/down命令和基於/etc/network/interfaces配置文件的ip、網關配置方法不再支持,取而代之的是使用netplan命令和基於/etc/netplan/*.yaml文件的配置方法。
  • 桌面版默認使用圖形化的NetworkManager管理網絡,服務器版使用systemd-networkd管理網絡(桌面版也可更改為此)。

1. iproute2套件的使用

老版的Linux常用ifconfigroutearpnetstat等命令行工具(統稱為net-tools)來配置網絡功能。但自2001年起,Linux社區已經對其停止維護。同時,一些Linux發行版已經完全拋棄了net-tools,只支持iproute2。Ubuntu20.04若要使用ifconfig等工具,需要自行安裝net-tools套件。
取而代之的是iproute2,其是linux下管理控制TCP/IP網絡和流量控制的新一代工具包。net-tools通過procfs(/proc)和ioctl系統調用去訪問和改變內核網絡配置,而iproute2則通過netlink套接字接口與內核通訊。拋開性能而言,net-tools的用法給人的感覺是比較亂,而iproute2的用戶接口相對net-tools來說更加直觀。比如,各種網絡資源(如link、IP地址、路由和隧道等)均使用合適的對象抽象去定義,使得用戶可使用一致的語法去管理不同的對象。
iproute2 的核心命令是ip:

root@Ubuntu20.04:~# ip --help
Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }
       ip [ -force ] -batch filename
where  OBJECT := { link | address | addrlabel | route | rule | neigh | ntable |
                   tunnel | tuntap | maddress | mroute | mrule | monitor | xfrm |
                   netns | l2tp | fou | macsec | tcp_metrics | token | netconf | ila |
                   vrf | sr | nexthop }
       OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |
                    -h[uman-readable] | -iec | -j[son] | -p[retty] |
                    -f[amily] { inet | inet6 | mpls | bridge | link } |
                    -4 | -6 | -I | -D | -M | -B | -0 |
                    -l[oops] { maximum-addr-flush-attempts } | -br[ief] |
                    -o[neline] | -t[imestamp] | -ts[hort] | -b[atch] [filename] |
                    -rc[vbuf] [size] | -n[etns] name | -N[umeric] | -a[ll] |
                    -c[olor]}

配置網絡設備(相當於windows系統中打開網絡設備,看到的若干個網卡),可以啟用和禁用網卡,修改網卡的mac地址等。

  • ip link show: 顯示網絡設備列表
  • ip link show ens33: 顯示指定網絡設備的信息(ens33是我本機網卡的名字,須根據具體情況填寫)
  • ip link set ens33 up|down: 啟動或關閉ens33網卡

1.2 ip address

管理某個網絡設備的IP協議(相當於windows系統打開某個網卡的屬性),可以配置IP地址、網關地址等。

  • ip address show: 列出活動網卡的ip地址
  • ip address show ens33: 列出指定網卡的ip地址
  • ip address add|del 192.168.31.2/24 ens33: 為網卡ens33增加或刪除ip地址/掩碼

1.3 其它ip指令

  • ip addrlabel
    ipv6地址管理
  • ip route
    管理路由表
  • ip rule
    管理路由策略
  • ip neigh
    neigh是neighbor的縮寫,用於管理局域網內的ARP表
  • ip maddr
    多播地址管理
  • ip mroute
    多播路由管理

1.4 查看套接字指令:ss和lsof -i

net-tools中還有一個查看套接字統計信息的netstat指令也很常用,在iproute2中被ss指令取代。

  • ss -l: 列出已監聽端口的TCP連接
  • ss -a: 列出所有連接

還有一個類似功能的常用指令:lsof -i。lsof全稱是list openfiles,列出打開的文件。在Linux中(包括網絡套接字)都是文件。通過lsof -i則可以獲取網絡連接信息,還可以通過lsof -i:port反查指定port的進程號。

2. netplan命令和/etc/netplan/*.yaml配置文件

在老版的Ubuntu中,是通過/etc/network/interfaces文件進行靜態IP地址的配置,通過/etc/resolv.conf進行DNS設置。Netplan 網絡配置從 Ubuntu 18.04 開始首次引入,在新版的Ubuntu中,通過/etc/netplan/目錄下的yaml文件進行IPDNS配置。打開該目錄下的配置文件如下:

# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
  version: 2
  renderer: networkd
  ethernets:
    ens33:
     dhcp4: no
     addresses: [192.168.31.2/24]
     gateway4: 192.168.1.1
     nameservers:
       addresses: [114.114.114.114]

這是ubuntu服務器版本的配置方法,如果是桌面版,可以使用可視化的NetworkManager來接管網絡,則該配置文件的renderer字段可設置為:NetworkManager,后面的部分都刪除。當然,桌面版也可以按照上文示例設置,而不使用NetworkManager。
該配置文件的書寫格式上有幾點需要注意:

  • ethernets中的網卡名可以通過ip link指令查看,此處的ens33是本人虛擬機的網卡,替換為你自己的。
  • 使用類似於python代碼縮進的方式組織代碼塊。
  • 縮進一級至少為兩個空格,且前后一致。
  • gateway4字段的ip地址不用中括號(只有一個)。
  • 本機addresses字段和域名服務器addresses字段都需要中括號,多個ip之間使用逗號分隔。

配置完成后,需要執行sudo netplan apply使配置生效。

再看另一個示例:

root@Ubuntu20.04:~# cat /etc/netplan/99-eth0.yaml 
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: no
      match:
        macaddress: 00:16:3e:00:08:54
      addresses: [10.180.43.126/21]
      gateway4: 10.180.47.253
      mtu: 1360
      routes:
        - to: 0.0.0.0/0
          via: 10.180.47.253

3. YAML格式

YAML的語法和其他高級語言類似,並且可以簡單表達清單、散列表,標量等數據形態。它使用空白符號縮進和大量依賴外觀的特色,特別適合用來表達或編輯數據結構、各種配置文件、傾印調試內容、文件大綱。

3.1 YAML格式-多行縮進

數據結構可以用類似大綱的縮排方式呈現,結構通過縮進來表示,連續的項目通過減號“-”來表示,map結構里面的key/value對用冒號“:”來分隔。樣例如下:

house:
  family:
    name: Doe
    parents:
      - John
      - Jane
    children:
      - Paul
      - Mark
      - Simone
  address:
    number: 34
    street: Main Street
    city: Nowheretown
    zipcode: 12345

注意:

  1. 字串不一定要用雙引號標識;
  2. 在縮排中空白字符的數目並不是非常重要,只要相同階層的元素左側對齊就可以了(不過不能使用TAB字符);
  3. 允許在文件中加入選擇性的空行,以增加可讀性;
  4. 在一個檔案中,可同時包含多個文件,並用“——”分隔;
  5. 選擇性的符號“...”可以用來表示檔案結尾(在利用串流的通訊中,這非常有用,可以在不關閉串流的情況下,發送結束訊號)。

3.2 YAML格式-單行縮寫

YAML也有用來描述好幾行相同結構的數據的縮寫語法,數組用'[]'包括起來,hash用'{}'來包括。因此,上面的這個YAML能夠縮寫成這樣:

house:
  family: { name: Doe, parents: [John, Jane], children: [Paul, Mark, Simone] }
  address: { number: 34, street: Main Street, city: Nowheretown, zipcode: 12345 }

4. NetworkManager失效的解決辦法

桌面版Ubuntu可通過可視化的NetworkManager管理網絡,類似於Windows系統的更改適配器選項。
但虛擬機安裝的桌面版Ubuntu經常會因為虛擬機的掛起或者非正常關機導致NetworkManager失效。失效時,桌面右上角的設置菜單中可以看到“網絡設備未托管”的提示。若出現該問題,可修改/etc/NetworkManager/NetworkManager.conf配置文件,將managed=False修改為True。修改配置文件后,重啟NetworkManager服務:sudo service network-manager restart,則可修復問題。若此方法未能解決問題,則使用上一節介紹的netplan配置網絡。


更多ubuntu系統網絡配置請參考:
Netplan——新一代網絡配置工具
Ubuntu 配置上的 Netplan 靜態 IP
Netplan
Netplan configuration examples
different YAML format


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM