Linux网络相关

系统网卡设置

/etc/network/interfaces内容如下:

1
2
3
4
5
auto lo
iface lo inet loopback

auto enp3s0
iface enp3s0 inet dhcp

自动加载网卡loenp3s0,将lo设置为回环,enp3s0设置为DHCP自动获取IP

ifconfig enp3s0 down可以使对应网卡无效,up可以使之有效。另外:

1
2
ifup 网卡名称    //启动某网卡,可能需要用sudo
ifdown 网卡名称 //禁用某网卡

以服务的形式开关网卡(需要root)

  • service network start
  • service network stop
  • service network restart

rfkill list列出网卡是否被屏蔽的情况
sudo rfkill unblock all 解除所有无线网卡的屏蔽

查看局域网的所有主机的IP

使用nmap对局域网扫描,查看arp缓存表就可以知道局域内主机ip和mac。使用nmap -sP 192.168.1.0/24进行ping扫描,打印出对扫描做出响应的主机,就能获知此网段的所有IP

nmap -sS -O 192.168.0.127 探测某主机的端口和操作系统情况

ifconfig

ifconfig可以看到每个网卡对应的IP地址

  • 第一行:连接类型:Ethernet(封装类型-以太网) HWaddr(硬件mac地址)。
  • 第二行:网卡的IP地址、广播、掩码。
  • 第三行:IPV6不用管
  • 第四行:UP(代表网卡开启状态)BROADCAST(广播) RUNNING(代表网卡的网线被接上)MULTICAST(支持组播)MTU:1500(最大传输单元):1500字节。
  • 第四行:接收的包
  • 第五行:发送的包

查看网关

route -n

查看网卡

台式机一般有两个网卡,用两根网线连接装置。

  • lspci | grep Eth  查看物理网卡

  • 查看两个网卡的连接情况:

lspci | grep -i net

sudo lshw -C network 查看网卡详细情况

命令行连接 wifi

查看可以使用的无线网

1
nmcli dev wifi

出现这样的结果:

或者nmcli device wifi list

连接无线网

1
nmcli dev wifi connect 网络名称 password 密码

iwconfig

用于系统配置无线网络设备,或显示无线网络设备信息。 仅和无线网络相关,用来设置参数等。

Ubuntu安装无线网卡驱动

lspci | grep net找到对应网卡名称,再用lsusb找出对应的ID号,比如

1
Bus 001 Device 009: ID 148f:3070 Ralink Technology, Corp. RT2870/RT3070 Wireless Adapter

就是148f:3070,然后据此上网找驱动。

依据安装Linux Kernel 4.15先升级内核版本到4.15,再按下面步骤进行

  1. Download driver directory from this repo: https://github.com/endlessm/linux/tree/master/drivers/net/wireless/rtl8821ce

You can do it by this link: https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/endlessm/linux/tree/master/drivers/net/wireless/rtl8821ce

  1. Unpack zip archive.
  2. Change the Makefile. Line export TopDIR ?= ... to export TopDIR ?= PATH TO EXTRACTED DIRECTORY. 再根据make的报错信息将报错的那行去掉
  3. make
  4. sudo make install
  5. sudo modprobe -a 8821ce

network-scripts

路径 /etc/sysconfig/network-scripts。文件ifcfg-eth0ifcfg-eth1是两个网卡的信息,如果缺少,说明网卡配置不正确。其中的HWADDR是MAC地址;ONBOOT如果是yes,代表启动时激活;BOOTPROTO是协议类型,一般是NONE;
在修改文件ifcfg-eth0后还需要重新导入文件才能生效: /etc/init.d/network reload,其他命令还有start, stop, restart.

问题

Ubuntu无法无线上网

电脑装了Ubuntu16.04后,系统配置里无线上网的开关都打不开,自己加一个无线网卡也不行。

这个问题困扰了我几天,在网上查了很久,但网上提供的方法都没用,最后严重怀疑是网卡和Ubuntu版本不匹配的问题。最后,我用U盘做了一个Ubuntu系统,与工控机的一样,用try without install Ubuntu的方式启动,发现工控机的Ubuntu版本比我自己的电脑内核版本低。这时插上外置无线网卡,等了一会找到信号了。因此,我重装为旧内核版本的Ubuntu,结果发现插上外置无线网卡后,能发现几个无线信号,但显示是在范围之外,偶尔能连接上一次。

最后决定拆掉笔记本的内置无线网卡。果然,拆掉后插上外置无线立刻就正常了。

也可以不拆网卡,ifconfig enp3s0 down可以使对应网卡无效,up可以使之有效。将自带网卡down掉,然后用外接网卡,最好将auto行删掉

修复双网卡同IP

两个网卡,但网络编辑里只有一个自动,两个网卡会用同一个IP,导致双机通信不正常。
解决:删除后重新添加两个有线网络。分别命名为Eth0、Eth1, 然后用ifconfig查看两个网络的MAC地址,分别填写,然后再编辑IP等参数,恢复正常。

SSH

执行ssh root@192.168.20.232 报错 Unable to negotiate with 192.168.20.232 port 22: no matching host key type found. Their offer: ssh-rsa

解决方法: ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedKeyTypes=+ssh-rsa root@192.168.20.232 -p 22

配置8812无线网卡

以前保存了编译成功的8812au.ko,但是那是在ubuntu20.04上编译的,放到ubuntu18.04上不能用,估计是内核版本冲突,执行modprobe时报错,最后从头编译安装。

1
2
3
4
5
6
7
git clone https://github.com/gnab/rtl8812au.git
cd rtl8812au
make
sudo make install

sudo modprobe 8812au
sudo lsmod | egrep 8812au

顺利的话,不需要重插无线网卡,应该直接可以连接wifi了。