怎么给linux配置网络 linux配置网络的五个步骤

很久没搞懂linux的网管了。今天学习了网络的手动配置,现在来记录一下。我用Ubuntu20.04.1来演示,我们将最终实现不用网管连接互联网。介绍首先,我们先澄清一些概念性的东西,摆脱

本文最后更新时间:  2023-02-28 13:32:15

很久没搞懂linux的网管了。今天学习了网络的手动配置,现在来记录一下。我用Ubuntu20.04.1来演示,我们将最终实现不用网管连接互联网。


介绍

首先,我们先澄清一些概念性的东西,摆脱你对linux下网络管理的误解。1.ip配置模式有两种ip配置模式,一种是静态模式,一种是DHCP模式。静态ip是给网卡分配一个固定的IP;DHCP方法更复杂。比如通过路由器连接互联网,路由器上运行着一个DHCP服务器,负责给每台设备分配ip,而每台设备都有一个DHCP客户端,用来和路由器通信,然后获取路由器给自己分配的ip地址(获取ip后,当然要调用底层工具来配置网卡的ip)。DHCP方法分配的IP可能会改变,但静态方法不会。2.Linux上的底层网络命令现在是最常见的两组网络命令,net-tools和iproute2(参考archlinux wiki)。下图是这两组工具中常用命令的对应关系,左边是net-tools包中的命令集。右边是较新的iproute2工具集。中文互联网教程中常用的ifconfig命令在net-tools包中。现在我们推荐使用iproute2工具集来管理网络,因为net-tools会因为不再维护而逐渐被抛弃。我们最好不要混合使用这两套命令,这样会造成混乱。我们可以使用这些低级命令来配置网络并连接到互联网。具体方法后面再讲。

两组网络管理命令

3.linux上的网管需要知道,用底层的网管命令来管理网络需要一长串命令行,这对于一个普通的linux用户来说是很麻烦的,更不用说那些从来没有接触过Linux的白人用户了。因此,会出现网络管理器,它们可以自动配置您的网络。连接互联网非常方便。以下是一些常见的网络管理器。用户可以很容易地配置他们的ip是静态的还是DHCP,他们自己的网关,自定义dns等。通过使用这些管理器提供的命令行界面或图形界面。他们甚至可以轻松连接到wifi。但是我们需要注意的是,网络管理器是互斥的,也就是不能用多个网络管理器同时管理网络连接。同时,在使用网络管理器管理网络连接时,我们不应该使用底层的网络命令来手动控制网络连接,因为网络管理器已经为我们做了这些事情。如果同时使用网络命令更改网络设置,可能会导致网络连接问题。

公共网络管理器


Ubuntu20.04.1上的网络管理器

据我所知,ubuntu的两个网管都是默认运行的。使用以下两个命令进行确认。

#使用下面两个命令查看两种网络管理器的状态.> systmctl status NetworkManager...(output)>systemctl status systemd-networkd...(output)

您应该可以看到它们都是活动的。前面介绍不是说网管互斥吗?其实在你面前,只是通俗的告诉你最好不要这样用,只要网络配置不冲突。但是Ubuntu发行版已经通过开发者的配置避免了这两个管理器的冲突。我没研究过怎么做。为了保证强迫症的需求,我们进行了一个实验,输入了以下命令:

#永久关闭systemd-networkd管理器>sudo systemctl disable --now systemd-networkd

关闭systemd-networkd网络管理器,重新启动系统后,可以发现仍然可以正常使用网络,没有任何改变。systemd-resolved是networkd manager的一个组件,但是如果你聪明的关闭systemd-resolved,重启后会发现网络有问题:

>sudo systemctl disable --now systemd-resolved

这是因为在ubuntu中,NetworkManager的dns管理部分使用systemd提供的dns服务——默认解析。systemd-resolved用于域名解析,可以理解为dns客户端。如果关闭了systemd-resolved服务,DNS解析将出错,您将无法正确访问网页。但是通过ping命令可以发现,虽然不能ping域名,但是可以正常ping IP。

>ping www.baidu.com //ping 错误>ping 114.114.114.114 //可以ping通


手动配置网络并连接到互联网。

这是我们文章的主题。它不适用于网络管理员。手动配置网络可以让我们的系统正常上网。首先,您必须取消之前的更改,并将系统恢复到原始状态。步骤1:关闭所有网络管理器。为了避免手动配置网络造成的网络冲突,我们需要关闭网络管理器。在ubuntu上,我们使用以下命令:

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

重启后网络无法正常使用,甚至连ping都无法工作。第二步:给网卡接口分配ip,打开网卡接口。使用以下命令为网卡分配ip地址:IP Addr Add[IP/Madk]dev[interface]我的linux虚拟机与主机桥接,主机通过wifi与路由器连接,所以我的主机、虚拟机和路由器应该在同一个网段。我的路由器的ip是192.168.31.1,路由器的DHCP的ip范围是192.168.31.5到192.168.31.254。为了防止与DHCP地址池中的IP发生冲突,我将linux设置为192.168.31.4。

> sudo ip addr add 192.168.31.2/24 dev ens33

这个时候我的界面ens33还没有打开。您可以使用ip addr来查看您的状态是否为down。如果是,您需要使用以下命令打开该接口:

>ip link set dev ens33 up

此时,我们使用ping命令,发现我们可以连接到LAN下的主机:

>ping 192.168.31.1>ping 192.168.31.212 //这是我宿主机的ip

步骤3:添加路由条目。在上一步中,我们发现可以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 // 返回正常

然后我们就可以正常浏览网页了。

温馨提示:内容均由网友自行发布提供,仅用于学习交流,如有版权问题,请联系我们。