Linux服务器搭建笔记-008:台式机共享WIFI

Linux 台式机共享 Wi-Fi 给路由器:从一次真实组网理解网络基础

本文记录一次真实的局域网组网与排障过程。目标是让一台 Linux 台式机通过 Wi-Fi 访问上级网络,再将网络从有线网卡共享给家用路由器,最终供笔记本和工控机稳定联网。

为方便公开发布,本文把上级 Wi-Fi 统一称为"校园 Wi-Fi"。文中的地址均为私有地址,不是公网地址。

一、需求与最终拓扑

设备包括:

  • 一台 Linux 台式机:无线连接校园 Wi-Fi,同时带有有线网卡;
  • 一台 TP-LINK XDR1520 路由器;
  • 一台工控机:使用网线连接路由器;
  • 一台笔记本:使用 Wi-Fi 连接路由器。

最终拓扑如下:

text 复制代码
互联网
  │
校园网络网关:192.168.110.1
  │
Linux 台式机无线网卡:192.168.110.140
Linux 台式机有线网卡:10.42.0.1
  │
XDR1520 WAN:10.42.0.126
XDR1520 LAN:192.168.50.1
  ├── 工控机:192.168.50.100
  └── 笔记本:192.168.50.101

Linux 台式机在这里不仅是一台普通电脑,还临时承担了一台"小路由器"的角色:

  1. 从无线网卡接收互联网连接;
  2. 从有线网卡向下级路由器提供网络;
  3. 转发下级设备的数据;
  4. 对这些数据进行 NAT 地址转换。

二、WAN 与 LAN 是什么

对路由器而言,可以把网络分为外侧与内侧:

text 复制代码
上一级网络 ← WAN | 路由器 | LAN → 自己管理的设备
  • WAN:路由器连接上一级网络的一侧;
  • LAN:路由器连接并管理内部设备的一侧。

在本案例中:

text 复制代码
XDR1520 WAN 地址:10.42.0.126
XDR1520 LAN 地址:192.168.50.1

同一台路由器同时拥有两个 IP 很正常,因为它连接着两个不同的网络。

需要注意:WAN 不等于 Wi-Fi,LAN 也不等于网线。笔记本虽然通过 Wi-Fi 连接 XDR1520,但它仍属于 LAN;台式机虽然通过网线连接 XDR1520,但连接的是路由器的 WAN 一侧。

三、为什么会有三组不同的 IP

本次组网包含三个局域网:

1. 校园网络

text 复制代码
校园网关:192.168.110.1
台式机无线网卡:192.168.110.140

2. 台式机与 XDR1520 之间的网络

text 复制代码
台式机有线网卡:10.42.0.1
XDR1520 WAN:10.42.0.126

3. XDR1520 管理的内部网络

text 复制代码
XDR1520 LAN:192.168.50.1
工控机:192.168.50.100
笔记本:192.168.50.101

每块网卡面对一个网络,就需要在那个网络中拥有一个 IP 地址。

四、DHCP:局域网里的"自动发地址服务"

设备刚接入网络时,通常不知道应该使用哪个 IP。DHCP 服务器会自动告诉它:

  • IP 地址;
  • 子网掩码;
  • 默认网关;
  • DNS 服务器;
  • 地址租期。

本案例有三层 DHCP 分配关系:

text 复制代码
校园网络的 DHCP
  └── 给台式机无线网卡分配 192.168.110.140

Linux 台式机的 DHCP
  └── 给 XDR1520 WAN 分配 10.42.0.126

XDR1520 的 DHCP
  ├── 给笔记本分配 192.168.50.101
  └── 给工控机保留 192.168.50.100

XDR1520 在两个方向扮演不同角色:

  • 面对台式机时,它是 DHCP 客户端,向台式机申请地址;
  • 面对笔记本和工控机时,它是 DHCP 服务器,给内部设备分配地址。

为了让 SSH 地址长期稳定,可在 XDR1520 中根据工控机网卡的 MAC 地址,将 192.168.50.100 保留给工控机。工控机仍可使用"自动获取 IP",同时每次都得到同一个地址。

五、子网掩码与 /24

常见的:

text 复制代码
255.255.255.0

不是 DNS,而是子网掩码。它用来判断目标 IP 是否和自己处于同一局域网。

例如:

text 复制代码
笔记本 IP:192.168.50.101
子网掩码:255.255.255.0

可以先简单理解为前三段 192.168.50 代表网络,最后一段代表设备。因此下面的地址在同一网段:

text 复制代码
192.168.50.1
192.168.50.100
192.168.50.101
192.168.50.220

而下面的地址不在同一网段:

text 复制代码
10.42.0.1
192.168.110.1
223.5.5.5

255.255.255.0 也可以写成 /24,所以:

text 复制代码
192.168.50.0/24

表示 192.168.50.x 这一整个网络。通常:

text 复制代码
192.168.50.0     网络地址,不能分给普通设备
192.168.50.1~254 可分配给设备
192.168.50.255   广播地址

六、默认网关:离开当前局域网的大门

一台设备访问同网段目标时,可以直接通信;访问其他网络时,则需要把数据交给默认网关。

以笔记本 192.168.50.101 为例:

text 复制代码
访问工控机 192.168.50.100
→ 同一网段,直接通信

访问公共 DNS 223.5.5.5
→ 不同网段,交给默认网关 192.168.50.1

笔记本访问互联网时,各设备只需知道自己的下一站:

text 复制代码
笔记本 192.168.50.101
  ↓ 默认网关
XDR1520 LAN 192.168.50.1
  ↓ XDR1520 的默认网关
Linux 台式机有线口 10.42.0.1
  ↓ 台式机的默认网关
校园网关 192.168.110.1
  ↓
互联网

每台设备不必知道完整路径,只需要知道下一站。

七、路由表:设备内部的导航规则

Linux 台式机的 IPv4 路由表中有类似内容:

text 复制代码
10.42.0.0/24 dev eno2
192.168.110.0/24 dev wlp0s20f3
default via 192.168.110.1 dev wlp0s20f3

含义是:

text 复制代码
去 10.42.0.x       → 走有线网卡 eno2
去 192.168.110.x   → 走无线网卡 wlp0s20f3
去其他所有地址     → 从无线网卡交给 192.168.110.1

系统会优先使用更具体的规则。只有没有具体规则匹配时,才使用 default 默认路线。

查看 Linux 路由表:

bash 复制代码
ip -4 route

八、ARP、IP 和 MAC 各自做什么

  • IP 地址:标识设备所在的网络以及网络中的位置;
  • MAC 地址:在当前局域网内标识具体网卡;
  • ARP:查询某个 IPv4 地址对应的 MAC 地址。

笔记本访问同网段的工控机时,会在局域网中询问:

text 复制代码
谁拥有 192.168.50.100?请告诉我你的 MAC 地址。

工控机回应后,笔记本会暂时缓存:

text 复制代码
192.168.50.100 → 工控机网卡的 MAC 地址

Windows 可以查看 ARP 缓存:

powershell 复制代码
arp -a

笔记本访问外网 223.5.5.5 时,不会查询公网服务器的 MAC,因为对方不在本地局域网。它会查询默认网关 192.168.50.1 的 MAC,并先把数据交给路由器。

第一段数据可以这样理解:

text 复制代码
IP 层:
来源 IP:192.168.50.101
目标 IP:223.5.5.5

当前局域网的 MAC 层:
来源 MAC:笔记本的 MAC
目标 MAC:XDR1520 LAN 侧的 MAC

目标 IP 仍然是最终目的地;目标 MAC 则是当前这一段的下一站。

九、交换与路由的区别

  • 交换:主要依据 MAC 地址,在同一个局域网内部转发;
  • 路由:主要依据 IP 地址,在不同网络之间转发。

XDR1520 同时承担两类工作:

text 复制代码
笔记本 ↔ 工控机
→ 同一网段,主要做交换/AP转发,不经过 WAN,不需要 NAT

笔记本 → 互联网
→ 跨越不同网段,需要路由和 NAT

十、NAT:为什么私有地址也能访问互联网

下面三类地址都是私有 IP:

text 复制代码
10.0.0.0/8
172.16.0.0/12
192.168.0.0/16

私有 IP 可以在不同局域网中重复使用,但不能直接在公网中路由。本案例中的:

text 复制代码
192.168.50.101
10.42.0.126
192.168.110.140

全都是私有地址。

笔记本访问互联网时,来源 IP 会被逐层改写:

text 复制代码
笔记本发出:192.168.50.101
  ↓ XDR1520 第一次 NAT
变成:10.42.0.126
  ↓ Linux 台式机第二次 NAT
变成:192.168.110.140
  ↓ 校园网络出口可能再次 NAT
变成:校园网络的公网出口 IP
  ↓
互联网

返回数据则根据各层设备保存的 NAT 连接记录逐层送回:

text 复制代码
互联网回复
  ↓
台式机无线网卡 192.168.110.140
  ↓ 台式机反向 NAT
XDR1520 WAN 10.42.0.126
  ↓ XDR1520 反向 NAT
笔记本 192.168.50.101

NAT 记录不仅包含 IP,还会结合协议和端口号,因此多台设备同时上网时,回复也不会被送错。

十一、端口号:找到设备上的具体服务

IP 地址负责找到设备,端口号负责找到设备中监听网络的具体服务。

可以类比为:

text 复制代码
IP 地址 = 一栋楼的地址
端口号  = 楼里的房间号

例如:

text 复制代码
192.168.50.100:22   → 工控机上的 SSH 服务
192.168.50.100:80   → 工控机上的 HTTP 服务

笔记本连接工控机 SSH 时,双方都有端口:

text 复制代码
笔记本:192.168.50.101:53001
  ↓
工控机:192.168.50.100:22
  • 22 是 SSH 服务通常使用的固定监听端口;
  • 53001 是笔记本为本次连接临时选择的来源端口;
  • 连接结束后,临时端口会被释放,下一次不一定相同。

十二、TCP、UDP 与 SSH

可以先用一个简单类比:

text 复制代码
TCP ≈ 打电话:先建立连接,再可靠、按顺序地交流
UDP ≈ 寄明信片:直接发送,通常不逐份确认

SSH 需要命令和文件可靠传输,所以使用 TCP。SSH 登录的大致顺序是:

text 复制代码
1. TCP 三次握手
2. SSH 协议和加密算法协商
3. 用户身份验证
4. 传输命令和终端输出

因此,不同 SSH 报错代表不同故障位置:

text 复制代码
连接超时   → 路径、防火墙或返回链路可能有问题
连接被拒绝 → 通常已经到达目标,但端口没有服务接收,或被明确拒绝
密码错误   → TCP和SSH服务基本正常,身份验证失败
成功登录   → 整个流程正常

Windows 可测试 SSH 的 TCP 22 端口:

powershell 复制代码
Test-NetConnection 192.168.50.100 -Port 22

结果中的:

text 复制代码
TcpTestSucceeded : True

表示 TCP 22 端口可以建立连接。

在 Linux 工控机上可以检查 SSH:

bash 复制代码
sudo systemctl status ssh
sudo ss -lntp | grep ':22'

监听地址的含义:

text 复制代码
0.0.0.0:22          接收所有本机 IPv4 网卡的连接
127.0.0.1:22        只允许本机通过回环地址连接
192.168.50.100:22   只在这个具体 IPv4 地址上监听

客户端不能连接 0.0.0.0,而应连接工控机的实际地址:

bash 复制代码
ssh 用户名@192.168.50.100

十三、DNS:把域名翻译成 IP

DNS 可以理解为互联网的"电话簿":

text 复制代码
www.baidu.com → 180.101.49.44(示例结果之一)

DNS 负责回答"域名对应哪个 IP",默认网关则负责"如何把数据送到那个 IP"。两者职责不同。

223.5.5.5 是阿里云提供的公共 DNS 地址之一,不是百度地址,也不是校园网内部地址。测试它的意义在于:直接使用 IP,不依赖域名解析。

bash 复制代码
ping 223.5.5.5

若它能通,说明基本外网路径大概率正常。

bash 复制代码
ping www.baidu.com

则同时涉及 DNS 解析和网络连通性。

常见判断:

text 复制代码
能访问具体 IP,但域名打不开
→ 优先检查 DNS

十四、Linux 共享模式做了什么

先查看连接名称:

bash 复制代码
nmcli connection show

将有线连接设置成共享模式:

bash 复制代码
sudo nmcli connection modify "Wired connection 1" ipv4.method shared
sudo nmcli connection down "Wired connection 1"
sudo nmcli connection up "Wired connection 1"

NetworkManager 的 shared 模式通常会自动完成:

  1. 给有线网卡设置 10.42.0.1;
  2. 在有线侧启动 DHCP/DNS 转发服务;
  3. 开启 IPv4 转发;
  4. 建立必要的防火墙与 NAT 规则。

本案例中的状态为:

text 复制代码
eno2:10.42.0.1/24
wlp0s20f3:192.168.110.140/24
net.ipv4.ip_forward = 1

检查命令:

bash 复制代码
nmcli device status
nmcli connection show --active
nmcli -g ipv4.method connection show "Wired connection 1"
ip -4 route
sysctl net.ipv4.ip_forward

十五、为什么台式机能上网,而下级设备不能

Linux 防火墙会把流量大致分为三类:

text 复制代码
INPUT    目标是台式机自己的数据
OUTPUT   台式机自己产生的数据
FORWARD  只是经过台式机、需要转交给别人的数据

台式机自己访问互联网属于 OUTPUT;笔记本经过台式机访问互联网属于 FORWARD。

当时的现象是:

text 复制代码
台式机能访问互联网
笔记本能访问 XDR1520 和台式机有线口
笔记本不能访问公网 IP

这说明基础连接、DHCP、网关和台式机自身外网都正常,故障集中在 Linux 的转发/防火墙环节。系统中同时运行 Docker 等软件,它们也会管理防火墙规则;本次没有逐条证明是哪一个软件造成冲突,因此更严谨的结论是:转发链上的防火墙/NAT规则不完整或被其他规则影响。

临时补充了三条规则:

bash 复制代码
sudo iptables -I FORWARD 1 \
  -i eno2 -o wlp0s20f3 \
  -s 10.42.0.0/24 -j ACCEPT

sudo iptables -I FORWARD 1 \
  -i wlp0s20f3 -o eno2 \
  -d 10.42.0.0/24 \
  -m conntrack --ctstate ESTABLISHED,RELATED \
  -j ACCEPT

sudo iptables -t nat -I POSTROUTING 1 \
  -s 10.42.0.0/24 \
  -o wlp0s20f3 -j MASQUERADE

它们分别表示:

规则一:允许内部流量向外发送

text 复制代码
从 eno2 进入
从 wlp0s20f3 离开
来源属于 10.42.0.0/24
→ 允许转发

规则二:允许已建立连接的回复返回

text 复制代码
从 wlp0s20f3 进入
从 eno2 离开
目标属于 10.42.0.0/24
并且属于已经建立或相关的连接
→ 允许转发

ESTABLISHED,RELATED 不等于允许外部随意主动连接,它主要放行由内部设备主动发起连接后产生的返回流量。

规则三:进行 NAT 地址转换

text 复制代码
来源属于 10.42.0.0/24
即将从无线网卡离开
→ 将来源地址伪装成无线网卡当前的地址

MASQUERADE 很适合无线网卡这种通过 DHCP 获取、地址可能变化的接口。它会自动使用无线网卡当时的地址。

三个条件缺一不可:

text 复制代码
ip_forward = 1   → Linux允许充当路由器
FORWARD ACCEPT   → 防火墙允许这些中转流量
MASQUERADE       → 对来源地址执行 NAT

十六、让规则在网络重连后自动恢复

直接执行的 iptables 规则通常只保存在内存中,重启后可能消失。因此创建 NetworkManager dispatcher 脚本:

text 复制代码
/etc/NetworkManager/dispatcher.d/90-share-xdr1520

脚本内容:

bash 复制代码
#!/bin/sh

[ "$1" = "eno2" ] || exit 0

LAN_IF="eno2"
WAN_IF="wlp0s20f3"
SUBNET="10.42.0.0/24"

case "$2" in
  up|dhcp4-change)
    iptables -C FORWARD -i "$LAN_IF" -o "$WAN_IF" -s "$SUBNET" -j ACCEPT 2>/dev/null ||
      iptables -I FORWARD 1 -i "$LAN_IF" -o "$WAN_IF" -s "$SUBNET" -j ACCEPT

    iptables -C FORWARD -i "$WAN_IF" -o "$LAN_IF" -d "$SUBNET" \
      -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT 2>/dev/null ||
      iptables -I FORWARD 1 -i "$WAN_IF" -o "$LAN_IF" -d "$SUBNET" \
        -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

    iptables -t nat -C POSTROUTING -s "$SUBNET" -o "$WAN_IF" \
      -j MASQUERADE 2>/dev/null ||
      iptables -t nat -I POSTROUTING 1 -s "$SUBNET" -o "$WAN_IF" \
        -j MASQUERADE
    ;;
esac

赋予执行权限并检查语法:

bash 复制代码
sudo chmod 755 /etc/NetworkManager/dispatcher.d/90-share-xdr1520
sudo sh -n /etc/NetworkManager/dispatcher.d/90-share-xdr1520

sh -n 没有输出通常表示没有发现 shell 语法错误。

该脚本不是常驻后台程序。NetworkManager 在网络状态变化时调用它;它只处理 eno2,执行完立即退出。脚本先用 iptables -C 检查规则是否存在,不存在时才用 iptables -I 添加,避免重复插入。

注意:脚本中的网卡名和网段必须与实际环境一致。不同电脑可能不是 eno2 和 wlp0s20f3,应使用 nmcli device status 或 ip link 核对。

十七、不再共享网络时如何恢复

如果以后台式机直接通过网线上网,不再承担共享功能,需要把有线连接从 shared 改回 auto:

bash 复制代码
sudo nmcli connection modify "Wired connection 1" ipv4.method auto
sudo nmcli connection down "Wired connection 1"
sudo nmcli connection up "Wired connection 1"

并停用自动补规则的脚本:

bash 复制代码
sudo chmod -x /etc/NetworkManager/dispatcher.d/90-share-xdr1520

随后重启一次,当前内存中的临时规则通常会被清除,台式机就恢复为普通的 DHCP 客户端:

text 复制代码
shared → 台式机向网口后面的设备提供网络
auto   → 台式机从网口前面的网络获取地址和网络

auto 能成功上网的前提是网线连接的上级网络提供 DHCP;若网络要求固定 IP、PPPoE 或认证,则需按上级网络要求配置。

十八、分层排障方法

遇到"下级设备不能上网"时,不要一次修改所有设置,可以逐层测试。

1. 先确认台式机自己能上网

bash 复制代码
ping -c 4 223.5.5.5
ping -c 4 www.baidu.com

2. 查看 Linux 共享状态

bash 复制代码
nmcli device status
nmcli connection show --active
nmcli -g ipv4.method connection show "Wired connection 1"
ip -4 route
sysctl net.ipv4.ip_forward

3. 检查路由器 WAN

本案例正常参数为:

text 复制代码
WAN IP:10.42.0.126
子网掩码:255.255.255.0
默认网关:10.42.0.1
DNS:10.42.0.1

4. 在笔记本逐层测试

powershell 复制代码
ping 192.168.50.1
ping 10.42.0.1
ping 223.5.5.5
nslookup www.baidu.com

判断方式:

text 复制代码
192.168.50.1 不通
→ 笔记本与 XDR1520 LAN 之间有问题

192.168.50.1 通,10.42.0.1 不通
→ XDR1520 WAN、路由或隔离设置有问题

10.42.0.1 通,223.5.5.5 不通
→ Linux 转发、防火墙或 NAT 有问题

223.5.5.5 通,域名解析失败
→ DNS 有问题

全部测试成功但浏览器打不开
→ 检查系统代理、浏览器代理、Clash 等应用层设置

从 Linux 台式机直接 ping 192.168.50.1 失败不一定异常。台式机位于 XDR1520 的 WAN 一侧,家用路由器通常不允许从 WAN 侧访问 LAN 管理地址。

十九、最终理解

本次组网最核心的知识可以浓缩为:

  1. DHCP 自动分配 IP、网关、DNS 等参数;
  2. 子网掩码 判断目标是否处于同一局域网;
  3. 默认网关 是离开当前局域网的下一站;
  4. ARP 在本地 IPv4 局域网中查询目标或网关的 MAC;
  5. 交换 负责同网段通信,路由负责跨网段通信;
  6. NAT 将内部私有地址转换成外侧地址;
  7. IP 找设备,端口找设备上的服务;
  8. FORWARD 控制经过 Linux 中转的数据;
  9. ip_forward、防火墙放行和 NAT 规则共同实现 Linux 网络共享;
  10. 排障时应逐跳测试,先判断故障属于链路、路由、转发、DNS,还是具体应用。

通过这次实践,Linux 台式机完成了:

text 复制代码
无线网络入口
  + DHCP 服务
  + IPv4 路由转发
  + 防火墙放行
  + NAT 地址转换
= 一台临时的软件路由器
相关推荐
qq_284274051 小时前
机械原理笔记:平面机构自由度计算(复合铰链、局部自由度、虚约束)与四杆机构入门(含考点)
笔记·学习·平面·自动化·制造
hz567892 小时前
涉密视频会议设备配置指南:终端、音视频采集与配套设施选型
服务器·网络·数据库·安全·实时音视频·信息与通信·智能硬件
广州浮点FLOATLIC2 小时前
许可证服务器迁移后软件打不开:研发 IT 怎样定位连接问题
linux·服务器·数据库
优橙教育2 小时前
零基础学AI应用开发要多久?3个月能到什么水平
服务器·开发语言·网络·php
qq_284274052 小时前
数控铣床与加工中心笔记:铣刀与刀柄系统、G54试切对刀、镜像加工指令、孔加工工艺(钻扩铰镗)与固定循环G73/G83/G81/G76/G87/G84
笔记·学习·自动化·制造
BLUcoding2 小时前
接口服务公网超时排查记录:SecureRandom 阻塞问题分析与解决
java·linux·springboot·aes·securerandom
AIgorithmGEEK3 小时前
[Linux]从手写报头到内核套路:序列化、反序列化与自定义协议全链路
linux·运维·服务器·网络·序列化·反序列化
Nil2083 小时前
leetcode 139单词拆分
linux·运维·服务器
Starry-sky(jing)3 小时前
BUG: unable to handle kernel paging request 完整排查:dmesg 四要素与三路定罪
linux·运维·服务器·内核·排障
mounter6253 小时前
从硬件互连到操作系统变革:CXL 技术演进与 Linux 内核工程挑战
linux·运维·服务器