如何在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 // 返回正常
这时我们就可以正常浏览网页了.
如何在linux上手动连接到互联网的更多相关文章
- 如何在 Linux 上安装应用程序
如何在 Linux 上安装应用程序 编译自:https://opensource.com/article/18/1/how-install-apps-linux作者: Seth Kenlon原创:LC ...
- 如何在Linux上使用VIM进行.Net Core开发
对于在Linux上开发.Net Core的程序员来说, 似乎都缺少一个好的IDE. Windows上有Visual Studio, Mac上有Visual Studio for Mac, 难道Linu ...
- [转帖]如何在Linux上使用命令行查看硬件信息
如何在Linux上使用命令行查看硬件信息 时间:2016-01-13 作者:admin 分类:新手入门 阅读:126次 http://embeddedlinux.org.cn/emb-linux/ ...
- 如何在Linux上创建,列出和删除Docker容器
本篇文章介绍的内容是关于在Linux机器上创建,列出和删除docker容器,下面我们来看具体的内容. 1.启动Docker容器 使用下面的命令启动新的Docker容器.这将启动一个新的容器,并为你提供 ...
- 关于如何在Linux上使用Nugix反向代理部署net core3.1项目
本文意在教大家如何在Linux上部署net core web项目,本人通过实践已经成功可以通过外网访问我部署在阿里云服务器上的站点. 一:需要用到的东西如下: 1:一个基于net core框架下的we ...
- 如何在linux 上配置NTP 时间同步?
故障现象: 有些应用场景,对时间同步的要求严格,需要用到NTP同步,如何在linux上配置NTP时间同步? 解决方案: 在linux 上配置NTP 时间同步,具休操作步骤,整理如下: 1.安装软件包( ...
- 如何在Linux上通过grub添加内核参数
转自Linux中国 我们可以在linux内核启动时为其提供各种各样的参数.这些参数可以自定义内核默认的行为,或者通知内核关于硬件的配置信息.内核参数应在内核启动时通过引导装载程序,如GRUB或LILO ...
- 如何在 Linux 上复制文件/文件夹到远程系统?
从一个服务器复制文件到另一个服务器,或者从本地到远程复制是 Linux 管理员的日常任务之一. 我觉得不会有人不同意,因为无论在哪里这都是你的日常操作之一.有很多办法都能处理这个任务,我们试着加以概括 ...
- springboot打成的jar包如何在Linux上持久运行
一.首先说说在没有springboot的时候,项目是如何部署的? 1.动态web项目 动态web项目部署很方便,基本上上传文件到服务器的tomcat里面的webapps文件夹下即可完成部署.当然了,这 ...
随机推荐
- 读懂RESTful风格
RESTful就是资源定位和资源操作的风格.不是标准也不是协议. REST即Representational State Transfer的缩写,可译为"表现层状态转化".REST ...
- Python爬虫系统学习(1)
Python爬虫系统化学习(1) 前言:爬虫的学习对生活中很多事情都很有帮助,比如买房的时候爬取房价,爬取影评之类的,学习爬虫也是在提升对Python的掌握,所以我准备用2-3周的晚上时间,提升自己对 ...
- 几种常见css布局
单列布局 第一种 给定宽度,margin:auto 即可实现 html <div class="header"></div> <div class=& ...
- 后端程序员之路 24、Redis hiredis
Redishttps://redis.io/ Redis快速入门 - Redis教程http://www.yiibai.com/redis/redis_quick_guide.html wget ht ...
- 解读KMP算法
前后断断续续搞了5个月,每次都以为自己懂了, 但是要写的时候都不知从何下手,然后又是各种找博客,看帖子,所以这次试着用自己的语言写一个博客. 首先,KMP算法就是从一个模板字符串(S) 中匹配目标字符 ...
- 使用CSS计数器美化数字有序列表
在web设计中,使用一种井井有条的方法来展示数据是十分重要的,这样用户就可以很清晰的理解网站所展示的数据结构和内容,使用有序列表就是实现数据有组织的展示的一种简单方法. 如果你需要更加深入地控制有序列 ...
- HDOJ-2181(深搜记录路径)
哈密顿绕行世界问题 HDOJ-2181 1.本题是典型的搜索记录路径的问题 2.主要使用的方法是dfs深搜,在输入的时候对vector进行排序,这样才能按照字典序输出. 3.为了记录路径,我使用的是两 ...
- Spring中各种扩展原理及容器创建原理
一.BeanFactoryPostProcessor BeanFactory的后置处理器:在BeanFactory标准初始化之后调用,来定制和修改BeanFactory的内容:所有的bean定义已经保 ...
- 任务3 PHP配置 1. PHP基础配置
查看PHP配置文件得位置 #/ucsr/local/php/bin/php -i |grep -i "loaded configuration file" # cp /usr/lo ...
- DDD实战课--学习笔记
目录 学好了DDD,你能做什么? 领域驱动设计:微服务设计为什么要选择DDD? 领域.子域.核心域.通用域和支撑域:傻傻分不清? 限界上下文:定义领域边界的利器 实体和值对象:从领域模型的基础单元看系 ...