事情是这样的,我们都知道笔记本有两张物理网卡(一张有线,一张无线),Windows 10 还可以通过虚拟网卡开启 WIFI 热点(实际是通过物理无线网卡发射无线信号),将本机的网络共享给其他设备,那有什么方法可以反过来吗?

我的本机系统是 Windows 10,我手里有一张 RTL8188EU 的螃蟹网卡,由于安装了 Centos 的设备上并没有相应的驱动,所以我想将笔记本连接的 WIFI 网络通过笔记本的 WAN 口共享给这台设备,先让它联网安装驱动再使用无线网卡连接网络,首先声明一点,无法直接桥接有线网卡和无线网卡,因为两者的通信原理和使用的传输协议不同。下面是我实际的操作以及操作中遇到的问题。

1. 共享网络

Windows 系统的共享网络(包括开热点)实际上就是启用了主机的路由功能,中间做了一层 NAT 转换。

  1. 点击无线连接网卡的属性;

  2. 在弹出的窗口中共享给本地有线连接(以太网)。

现在本机的 WAN 口就作为 LAN 口来使用了,拿一根网线连接本机和其他设备,其他设备也能连通网络。但这还不够,由于我另一个设备是 CentOS 最小化安装的,我想通过 SSH 去连接操作这个设备,就需要给他设置一个静态的 IP 地址。

2. Centos 设置静态 IP

安装 Centos 7.9 系统的设备网卡情况:

插上网线后发现获取到 IP 地址的是 enp2s0 网卡,下面对其进行设置

  1. 查看目前 DHCP 方式分配的 IP 地址 和 网关地址。

    • 查看 IP 地址;

      1
      ip a # 或者 ifconfig(需要 yum update && yum install -y net-tools)
    • 查看网关地址;

      1
      route -n
  2. 设置静态 IP;

    1
    vim /etc/sysconfig/network-scripts/ifcfg-enp2s0

    修改内容如下:

    1
    2
    3
    4
    5
    6
    7
    	BOOTPROTO=static # 修改 dhcp 为 static
    + IPADDR=192.168.137.253 # 上一步获取到的 IP(从 IPADDR 到 DNS2 的配置全部紧跟 BOOTPROTO 添加)
    + NETMASK=255.255.255.0 # 子网掩码
    + GATEWAY=192.168.137.1 # 上一步获取到的网关
    + DNS1=114.114.114.114
    + DNS2=8.8.8.8
    ONBOOT=yes # 修改 no 为 yes

    ONBOOT=yes 代表在系统启动时激活网卡,如果不开启,每次设备重启后,需要手动使用ifup命令激活网卡才能连接网络,如:

    1
    >ifup enp2s0

    禁用网卡

    1
    >ifdown enp2s0
  3. 重启网络;

    1
    systemctl restart network
  4. 测试连通性。

    1
    ping www.baidu.com

现在设置好静态 IP 了,但如果重启共享网络的主机,被共享设备就会发现连接不上网络,最开始我认为网卡未被激活,实际上最后检测出是 Windows 的共享网络失败问题。

3. 设置 Windwos 解决重启后共享网络失败问题

参考来源:Windows 10 网络连接共享功能重启后失效

  1. 「Win + R」打开窗口,输入regedit打开注册表;

  2. 定位到:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\SharedAccess,在空白处右击鼠标,新建 “DWORD(32位)值(D)”,名称叫做EnableRebootPersistConnection,将数值数据改为1。

  3. 重启测试。

4. CentOS 安装无线网卡驱动

  1. 查看网卡型号;

    我的是 Realtek RTL8188EU Wireless LAN 802.11n USB 2.0 Network Adapter

  2. 查看目前系统安装的网卡驱动;

    1
    lspci | grep Ethernet

    可以看见没有 RTL8188EU 的驱动,需要手动安装

    如果 lspci 命令不可用,可以用以下方式,安装相应包

    • 查看哪个包有 lspci 命令;

      1
      yum whatprovides */lspci
    • 安装对应的包;

  3. 下载 RTL8188EU 驱动;

    1
    git clone https://github.com/lwfinger/rtl8188eu

    其他->官网 REALTEK 驱动下载:https://www.realtek.com/zh-tw/?spm=a2c6h.12873639.article-detail.6.72524a92HsQDGH

    注意:RTL8188EU 和 RTL8188 EUS 不是一个驱动,两者有很大的区别。

    RTL8188EU 是一款 802.11n 无线网卡,支持 2.4GHz 频段,支持单双流,最高速率可达 150 Mbps。

    RTL8188EUS 是一款 802.11ac 无线网卡,支持 2.4GHz 和 5GHz 双频段,支持单双流,最高速率可达867Mbps。

  4. 编译安装;

    1
    2
    cd rtl8188eu/
    make all && make install

    报错:

    1
    >make: *** /lib/modules/3.10.0-1160.81.1.el7.x86_64/build: 没有那个文件或目录。 停止。

    原因:向内核添加新的功能需要安装kernel-headerkernel-devel并且建立需要的软连接。

    参考文章:

    1
    >https://www.cnblogs.com/beixiaobei/p/9041143.html

    解决:

    • 安装 kernel-headers;
    1
    yum install kernel-headers-$(uname -r)
    • 安装 kernel-devel 到/usr/src/kernels
    1
    yum install kernel-devel-$(uname -r)
    • 根据上面报错提示创建内核软连接文件。
    1
    2
    # ln [OPTION] target DIRECTORY
    ln -sfv /usr/src/kernels/3.10.0-1160.81.1.el7.x86_64 /lib/modules/3.10.0-1160.81.1.el7.x86_64/build

    其他命令:

    1
    2
    3
    >lsmod # 查看加载的驱动列表
    >rmmod modname # 卸载已加载的驱动
    >modprobe -r modname # 如果用以上命令无法卸载,先执行此命令
  5. 插入网卡,查看网卡状态;

    1
    lsusb # 需要安装 usbutils

    RTL8188EU 外置网卡已经被识别(虽然显示的是RTL8188EUS,不影响)

    注意:大部份外置网卡被激活后会有提示灯,这里提示灯并未闪亮,但不影响使用

  6. 构建内核模块依赖关系表,以便内核模块管理器可以根据需要加载所有需要的模块。

    1
    depmod -a
  7. 从内核加载 RTL8188EU 模块;

    1
    modprobe 8188eu
  8. 查看网卡设备;

    1
    nmcli d # 或者 ifconfig

  9. 使用图形化工具连接 WIFI;

    1
    nmtui

    选择「编辑连接」

  10. 接下来就是水到渠成的操作,选择一个 WIFI,输入密码连接;

5. 再次设置静态 IP

  1. 进入配置目录;

    1
    cd /etc/sysconfig/network-scripts/
  2. 找到连接的那个 WIFI,编辑或添加如下内容;

    1
    2
    3
    4
    5
    6
    	BOOTPROTO=static # 修改 dhcp 为 static
    + IPADDR=192.168.0.106
    + NETMASK=255.255.255.0
    + GATEWAY=192.168.0.1
    + DNS1=223.6.6.6
    + DNS2=114.114.114.114
  3. 重启网络后再使用nmtui命令进入 UI 页面激活 WIFI 连接。

6. 解决 SSH 连接速度很慢问题

参考文章:CentOS7 SSH登陆慢的解决方法简述

  1. 修改文件/etc/ssh/sshd_config

    1
    vim /etc/ssh/sshd_config

    修改内容如下:

    1
    2
    GSSAPIAuthentication no
    UseDNS no
  2. 重启 sshd 服务;

    1
    systemctl restart sshd
  • UseDNS:当值为 yes 时,使用 DNS 查询,客户端连接时,先使用 DNS 反向查询客户端主机名,然后根据查询到的IP地址验证客户端身份。如果客户机的 IP 没有域名,或者DNS服务器很慢或不通,那么登录就会很花时间。
  • GSSAPIAuthentication:允许客户端使用 Kerberos 认证的 SSH 认证方式,它可以提供更安全的 SSH 认证机制。但该接口在目标机器无域名解析时会有问题。

参考文章: