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 添加,避免重复插入。

注意:脚本中的网卡名和网段必须与实际环境一致。不同电脑可能不是 eno2wlp0s20f3,应使用 nmcli device statusip 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 地址转换
= 一台临时的软件路由器
相关推荐
疯狂打码的少年30 分钟前
【数据库技术】SQL概述与数据定义(DDL:CREATE/DROP/ALTER)
数据库·笔记·sql·oracle
一条破秋裤43 分钟前
STM32 学习笔记:GPIO 输出原理与硬件设计
笔记·stm32·学习
w200512241 小时前
K8S控制器管理
linux·云原生·容器·kubernetes
Dream Cosmos1 小时前
Linux 多线程——线程互斥:从抢票问题到 Mutex 底层原理
linux·c++
摇滚侠1 小时前
《SpringBoot 3:入门与应用实战》第 9 章 使用 WebMvc 开发进阶 阅读笔记 24
spring boot·笔记·后端
玖石书1 小时前
Ubuntu 更换 USTC 镜像源完整指南(AMD64 / AARCH64)
linux·运维·ubuntu
zbyyd1 小时前
Linux 进程间通信(IPC):信号、消息队列、共享内存与信号量详解
linux·运维·c语言
摇滚侠1 小时前
《SpringBoot 3:入门与应用实战》第 9 章 使用 WebMvc 开发应用 阅读笔记 22
javascript·spring boot·笔记
yunwei371 小时前
AgentCgroup:当 AI Agent 遇到操作系统资源
linux·人工智能·后端