介绍
首先,我们先澄清一些概念性的东西,摆脱你对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 ***nager的一个组件,但是如果你聪明的关闭systemd-resolved,重启后会发现网络有问题:
>sudo systemctl disable --now systemd-resolved
这是因为在ubuntu中,NetworkManager的dns管理部分使用systemd提供的dns服务——默认解析。systemd-resolved用于域名解析,可以理解为dns客户端。如果关闭了systemd-resolved服务,DNS解析将出错,您将无***确访问网页。但是通过ping命令可以发现,虽然不能ping域名,但是可以正常ping IP。
>ping ***.baidu.com //ping 错误>ping 114.114.114.114 //可以ping通
手动配置网络并连接到互联网。
这是我们文章的主题。它不适用于网络管理员。手动配置网络,让我们的系统可以正常上网。
首先你要取消你之前做的更改,让系统恢复到原来的状态。
>systmctl disable --now NetworkManager>systmctl disable --now systemd-networkd>reboot
重启后网络无***常使用甚至ping都无法工作
第二步
:给网卡接口分配ip,打开网卡接口
使用下面的命令给网卡分配ip地址
IP addr add[IP/***dk]dev[inte***ce]
我的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,并将我的网络
>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
第三步
:添加路由条目
我们在上一步发现,可以ping通同一个局域网内的主机,但是如果是局域网外的ip,就不行了,如下:
>ping 114.114.114.114//ping 不通
这是因为我们没有设置路线。如下图所示,我们的局域网是可以访问的,因为家用路由器不是传统意义上的路由器(详见https://***.zhihu.com/question/369737960)。局域网通过家庭路由器下的交换机连接,不需要通过路由器路由。如果它需要与外部网络通信,我们需要在linux上添加一个路由器模块。
家庭路由器结构
我们在这里使用ip route命令,对我来说是以下命令:
>sudo ip route add default via 192.168.31.1 dev ens33
添加路由表后,我们会发现我们可以ping通外部网络。
第四步[/S2/]:ping外网后手动配置dns服务器
是不够的。我们此时无***常访问网页。没有网络管理器,我们必须手动配置dns服务器。这里,我们使用前面提到的systemd-resolved提供的cli命令resolvectl来配置dns服务器,如下所示:
>resolvectl dns ens33 192.168.31.1
下面我们来验证一下:
>ping ***.baidu.com // 返回正常
然后我们就可以正常浏览网页了。
本文来自又何必自找失落╮投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/621443.html