如何在linux上手動連網


作者 @飛洲人飛舟魂轉載請注明出處.

一直以來對linux的網絡管理不大明白,今天研究了一下網絡的手動配置,現在記錄一下.我使用Ubuntu20.04.1來進行演示.


介紹

首先我們先明確一些概念性的東西,剔除掉一下你對linux下網絡管理的錯誤認知.
1.ip配置方式
ip配置方式有兩種,一種是靜態(static)方式,另一種是DHCP的方式.靜態ip就是給網卡分配一個不動的ip;DHCP方式則要復雜些,以平常通過路由器連接互聯網為例,路由器上運行有DHCP服務器,負責給各個設備分配ip,而各個設備則有DHCP客戶端,用於和路由器通信,然后獲取路由器分配給自己的ip地址(獲取了ip之后當然要調用底層的工具來配置網卡ip).DHCP方式分配的ip可能是會變化的,而static方式則不會.
2.linux上的底層網絡命令
現在最常見的有兩組網絡命令,net-tools和iproute2(參考archlinux wiki).如下圖是這兩組工具集中常用命令的對應關系,左邊的是net-tools包里的命令集,右邊的則是較新的iproute2工具集.中文互聯網教程上經常使用的ifconfig命令就是net-tools包里的.現在我們推薦使用iproute2工具集來管理網絡,因為net-tools由於不再維護,會逐漸被廢棄.我們最好不要混用這兩組命令,造成混淆.
我們可以用這些底層命令來配置網絡,連接到互聯網,具體方法后面再說.
兩組網絡管理命令
3.linux上的network manager
要知道用底層的網絡管理命令來管理網絡是要使用一長串的命令行的,對於一個linux普通用戶來說十分麻煩,更不用說那些沒接觸過linux的小白用戶了,因此network manager就出現了,它們可以自動配置你的網絡,十分方便地連接到互聯網.
下面就是一些常見的network manager,用戶利用這些管理器提供的命令行界面或者是圖形界面能很容易地配置自己ip是靜態的還是DHCP的,配置自己的網關,還能配置自定義的dns等,甚至還可以很容易地連接到wifi.
但是我們需要注意的是:network manager是互斥的,即不可以同時利用多個network manager來管理網絡連接;同時,在用network manager來管理網絡連接的時候我們也不要手動地用底層網絡命令來控制網絡連接,因為網絡管理器已經代替我們做了這些事,如果同時使用網絡命令改變了網絡的設置可能會造成網絡連接的問題.
常見的網絡管理器


Ubuntu20.04.1上的網絡管理器(network manager)

據我了解,ubuntu的兩個網絡管理器默認都是運行狀態.使用下面兩個命令來確認.

#使用下面兩個命令查看兩種網絡管理器的狀態.
> systmctl status NetworkManager
...(output)
>systemctl status systemd-networkd
...(output)

你應該能看到都是顯示active的,那之前介紹里不是說了網絡管理器是互斥的么?其實前面只是通俗地叫你最好不要這樣用,只要保證網絡配置不沖突即可,而Ubuntu發行版通過開發人員的配置已經避免了這兩個管理器的沖突問題,具體如何如何做到,我也沒有深入研究.
為了保證強迫症的需求,我們進行一個實驗,輸入如下命令:

#永久關閉systemd-networkd管理器
>sudo systemctl disable --now systemd-networkd

關閉systemd-networkd網絡管理器后重啟系統,你可以發現你仍然可以正常使用網絡,沒有任何變化.
systemd-resolved是networkd管理器的一個組成部分,不過你要是自作聰明地關閉systemd-resolved就會發現重啟之后網絡不對勁了:

>sudo systemctl disable --now systemd-resolved

這是因為在ubuntu中,NetworkManager的dns管理部分默認使用systemd-resolved提供的dns服務.而systemd-resolved用作域名解析,可以理解為DHCP客戶端.若是關閉了systemd-resolved服務,dns解析就會出錯,就不能正確訪問網頁了,但是你可以通過ping 命令發現雖然不可以ping通域名,卻可以正常ping通ip,

>ping www.baidu.com //ping 錯誤
>ping 114.114.114.114 //可以ping通

手動配置網絡並連接至互聯網

下面就來進行我們本文的主題,不適用網絡管理器,手動配置網絡讓我們的系統能正常上網.
首先你要將你前面所作的更改取消,讓系統恢復原狀.
第一步:關閉所有的網絡管理器
為了避免由於手動配置網絡而造成的網絡沖突,我們需要關閉網絡管理器,在ubuntu上,我們使用如下命令:

> systmctl disable --now NetworkManager
> systmctl disable --now systemd-networkd
>reboot

重啟后,網絡不可以正常使用,連ping 也ping不通
第二步:給網卡接口分配ip,並開啟網卡接口
使用下面的命令給網卡分配ip地址
ip addr add [ip/madk] dev [interface]
我的linux虛擬機和宿主機是橋接的,宿主機與路由器通過通過wifi連接,因此我的宿主機,linux虛擬機,路由器應當處於同一網段.我路由器的ip為192.168.31.1,路由器的DHCP的ip范圍是192.168.31.5到192.168.31.254,為了防止和DHCP池里的IP相沖突,我就將linux設為192.168.31.4,而我的網絡接口名字為ens33,因此用命令如下來添加ip:

> sudo ip addr add 192.168.31.2/24 dev ens33 

這時我的接口ens33還沒有開啟,你可以使用ip addr來看你的status是否是down狀態,如果是,需要類似用下面的命令來開啟接口:

>ip link set dev ens33 up

這個時候我們使用ping命令,發現可以通局域網下的主機:

>ping 192.168.31.1
>ping 192.168.31.212 //這是我宿主機的ip

第三步:添加路由條目
我們上一步發現可以ping通同一個局域網內的主機,但若是局域網外的ip就無法通了,如下:

>ping 114.114.114.114//ping 不通

這是由於我們沒有設置路由導致的,如下圖,我們局域網內可通是因為家用路由器並不是常規意義上的路由器(具體可參考:https://www.zhihu.com/question/369737960).局域網在家用路由器下是通過交換機連接的,不需要通過路由器路由.如果需要與外網交流,我們需要給linux加一條通過路由器的路由模塊的路由條目.
家用路由器構造
我們這里使用ip route命令,對我來說是下面這個命令:

>sudo ip route add default via 192.168.31.1 dev ens33

添加完路由表我們會發現我們就可以ping通外網了.

第四步:手動配置dns服務器
ping通了外網還不行,我們這時是不能正常訪問網頁的,沒了網絡管理器后,想要正常上網,我們還必須手動配置dns服務器,這里我們使用之前提到過的啊 systemd-resolved提供的cli命令resolvectl來配置dns服務器,類似下面這樣:

>resolvectl dns ens33 192.168.31.1

下面驗證一下:

>ping www.baidu.com // 返回正常

這時我們就可以正常瀏覽網頁了.


免責聲明!

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



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