Linux 主机通过 Wi-Fi 上网,并将网络通过网口共享给交换机下游设备

Linux 主机通过 Wi-Fi 上网,并将网络通过网口共享给交换机下游设备

适用场景

一台 Linux 主机:

  • 通过 Wi-Fi 连接外网
  • 通过 有线网口 连接交换机
  • 希望让交换机后面的设备通过这台 Linux 主机共享上网

本指南采用 路由 + NAT 转发 的方式实现网络共享。


一、网络拓扑

text 复制代码
互联网
   |
Wi-Fi 热点 / 路由器
   |
wlp4s0 (Linux 主机)
Linux 主机
enp5s0 (192.168.1.89/24)
   |
交换机
   |
下游设备(例如 192.168.1.100/24)

二、本文中的实际配置示例

根据你当前的环境:

  • Wi-Fi 接口:wlp4s0
  • 有线接口:enp5s0
  • 有线连接名:有线连接 1
  • Wi-Fi 地址:10.105.212.146/20
  • 计划给有线侧配置:192.168.1.89/24
  • 下游设备地址示例:192.168.1.100/24
  • 下游设备网关:192.168.1.89

三、实现思路

Linux 主机需要完成以下几件事:

  1. 让有线网口使用固定地址 192.168.1.89/24
  2. 开启 IPv4 转发
  3. 配置 NAT,让下游设备的数据通过 Wi-Fi 出口转发到外网
  4. 给下游设备配置 IP、网关和 DNS

四、步骤 1:确认接口名称

先查看当前网络设备:

bash 复制代码
nmcli device status

正常会看到类似:

text 复制代码
wlp4s0           wifi      已连接        Chery-guest
enp5s0           ethernet  已连接        有线连接 1

确认:

  • wlp4s0 是 Wi-Fi 出口
  • enp5s0 是连接交换机的网口

五、步骤 2:确认 Wi-Fi 网段不冲突

查看 Wi-Fi 地址:

bash 复制代码
ip -4 addr show wlp4s0

示例输出:

text 复制代码
inet 10.105.212.146/20

说明 Wi-Fi 所在网段是 10.105.208.0/20 一类的网段,不是 192.168.1.0/24

因此,可以安全地把有线口设为:

text 复制代码
192.168.1.89/24

注意:

如果 Wi-Fi 侧本身也是 192.168.1.x/24,那就不能再把有线侧设成 192.168.1.x/24,必须改成其他网段,比如 192.168.50.1/24


六、步骤 3:将有线网口设置为共享模式

使用 NetworkManager 配置 enp5s0

bash 复制代码
sudo nmcli connection modify "有线连接 1" \
  ipv4.method shared \
  ipv4.addresses 192.168.1.89/24 \
  ipv6.method disabled

然后重启这个连接:

bash 复制代码
sudo nmcli connection down "有线连接 1"
sudo nmcli connection up "有线连接 1"

七、步骤 4:确认有线网口地址生效

执行:

bash 复制代码
ip -4 addr show enp5s0

应该看到类似:

text 复制代码
inet 192.168.1.89/24

再检查连接配置:

bash 复制代码
nmcli connection show "有线连接 1" | grep -E 'ipv4.method|ipv4.addresses'

预期输出:

text 复制代码
ipv4.method:                            shared
ipv4.addresses:                         192.168.1.89/24

八、步骤 5:开启 IPv4 转发

临时开启:

bash 复制代码
sudo sysctl -w net.ipv4.ip_forward=1

检查是否生效:

bash 复制代码
cat /proc/sys/net/ipv4/ip_forward

如果输出为:

text 复制代码
1

说明已经开启。


九、步骤 6:配置 NAT 和 FORWARD 转发规则

执行以下命令:

bash 复制代码
sudo iptables -t nat -F
sudo iptables -F FORWARD

sudo iptables -P FORWARD ACCEPT
sudo iptables -t nat -A POSTROUTING -o wlp4s0 -j MASQUERADE
sudo iptables -A FORWARD -i enp5s0 -o wlp4s0 -j ACCEPT
sudo iptables -A FORWARD -i wlp4s0 -o enp5s0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

这些规则的作用是:

  • 把从 enp5s0 进入、从 wlp4s0 出去的流量放行
  • 对发往 Wi-Fi 的流量进行地址伪装(NAT)
  • 允许已建立连接的返回流量回来

十、步骤 7:查看 NAT 和转发规则是否生效

查看 NAT 规则:

bash 复制代码
sudo iptables -t nat -vnL

查看 FORWARD 规则:

bash 复制代码
sudo iptables -vnL FORWARD

应当能看到类似规则:

text 复制代码
MASQUERADE  ...  out wlp4s0
ACCEPT      ...  in enp5s0 out wlp4s0
ACCEPT      ...  in wlp4s0 out enp5s0 ctstate RELATED,ESTABLISHED

十一、步骤 8:配置下游设备网络参数

下游设备接入交换机后,配置静态地址:

方案示例

  • IP 地址:192.168.1.100
  • 子网掩码:255.255.255.0
  • 默认网关:192.168.1.89
  • DNS:223.5.5.58.8.8.8

临时命令方式(适合测试)

在下游设备执行:

bash 复制代码
sudo ip addr add 192.168.1.100/24 dev <下游设备网卡名>
sudo ip route replace default via 192.168.1.89
echo "nameserver 223.5.5.5" | sudo tee /etc/resolv.conf

<下游设备网卡名> 替换成实际网卡名,例如 eth0enp1s0 等。


如果下游设备也使用 NetworkManager

先查看连接名:

bash 复制代码
nmcli connection show

然后修改对应连接,例如:

bash 复制代码
sudo nmcli connection modify "有线连接 1" \
  ipv4.method manual \
  ipv4.addresses 192.168.1.100/24 \
  ipv4.gateway 192.168.1.89 \
  ipv4.dns "223.5.5.5 8.8.8.8"

sudo nmcli connection down "有线连接 1"
sudo nmcli connection up "有线连接 1"

十二、步骤 9:验证网络是否连通

1. 先测试下游到网关

在下游设备上执行:

bash 复制代码
ping -c 3 192.168.1.89

如果通,说明下游到 Linux 主机的有线链路正常。


2. 测试下游是否能访问外网 IP

bash 复制代码
ping -c 3 223.5.5.5

如果通,说明 NAT 和转发已经正常工作。


3. 测试 DNS 是否正常

bash 复制代码
ping -c 3 baidu.com

如果能解析并 ping 通域名,说明共享网络已经完全成功。


十三、故障排查方法

问题 1:下游只能 ping 通 192.168.1.89,不能 ping 通公网

先检查下游设备是否有默认网关:

bash 复制代码
ip route

应该看到:

text 复制代码
default via 192.168.1.89

如果没有,补上:

bash 复制代码
sudo ip route replace default via 192.168.1.89

问题 2:下游能 ping 公网 IP,但不能 ping 域名

说明是 DNS 问题。设置 DNS:

bash 复制代码
echo "nameserver 223.5.5.5" | sudo tee /etc/resolv.conf

然后再测:

bash 复制代码
ping -c 3 baidu.com

问题 3:主机自己都不能上网

先在主机上执行:

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

如果主机自己都不能上网,就先修复主机的 Wi-Fi 网络,不要继续排查共享。


问题 4:iptables 规则存在,但下游还是不能上网

检查:

bash 复制代码
cat /proc/sys/net/ipv4/ip_forward
sudo iptables -t nat -vnL
sudo iptables -vnL FORWARD

重点确认:

  • ip_forward = 1
  • MASQUERADE
  • FORWARD 放行规则

十四、配置永久生效

1. 永久开启 IPv4 转发

执行:

bash 复制代码
echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-ipforward.conf
sudo sysctl --system

2. 保存 iptables 规则

在 Ubuntu / Debian 上:

bash 复制代码
sudo apt update
sudo apt install -y iptables-persistent
sudo netfilter-persistent save

安装时如果询问是否保存当前规则,选择:

text 复制代码
Yes

十五、回滚方法(恢复普通有线连接)

如果以后不想共享了,可以恢复 enp5s0 为普通联网口。

1. 恢复 NetworkManager 配置

bash 复制代码
sudo nmcli connection modify "有线连接 1" \
  ipv4.method auto \
  ipv4.addresses "" \
  ipv6.method auto

sudo nmcli connection down "有线连接 1"
sudo nmcli connection up "有线连接 1"

2. 清空转发和 NAT 规则

bash 复制代码
sudo iptables -t nat -F
sudo iptables -F FORWARD

3. 如需关闭 IPv4 转发

临时关闭:

bash 复制代码
sudo sysctl -w net.ipv4.ip_forward=0

永久关闭则删除或修改:

bash 复制代码
/etc/sysctl.d/99-ipforward.conf

十六、最终配置结果示例

主机 nvidia-MS-7D25

  • Wi-Fi:wlp4s0
  • Wi-Fi 地址:10.105.212.146/20
  • 有线口:enp5s0
  • 有线地址:192.168.1.89/24
  • 已开启:ip_forward
  • 已配置:iptables NAT + FORWARD

下游设备 fangzai-a

  • IP:192.168.1.100/24
  • 网关:192.168.1.89
  • DNS:223.5.5.5
  • 已成功访问公网和域名

十七、完整命令速查

主机端

bash 复制代码
nmcli device status

ip -4 addr show wlp4s0
ip -4 addr show enp5s0

sudo nmcli connection modify "有线连接 1" \
  ipv4.method shared \
  ipv4.addresses 192.168.1.89/24 \
  ipv6.method disabled

sudo nmcli connection down "有线连接 1"
sudo nmcli connection up "有线连接 1"

sudo sysctl -w net.ipv4.ip_forward=1

sudo iptables -t nat -F
sudo iptables -F FORWARD
sudo iptables -P FORWARD ACCEPT
sudo iptables -t nat -A POSTROUTING -o wlp4s0 -j MASQUERADE
sudo iptables -A FORWARD -i enp5s0 -o wlp4s0 -j ACCEPT
sudo iptables -A FORWARD -i wlp4s0 -o enp5s0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

sudo iptables -t nat -vnL
sudo iptables -vnL FORWARD

下游设备端

bash 复制代码
ip route

sudo ip route replace default via 192.168.1.89
echo "nameserver 223.5.5.5" | sudo tee /etc/resolv.conf

ping -c 3 192.168.1.89
ping -c 3 223.5.5.5
ping -c 3 baidu.com
相关推荐
gihigo199817 小时前
高效微逆变器设计:程序实现与上位机监控系统
网络
有毒的教程18 小时前
Ubuntu 虚拟机磁盘空间不足完整解决教程
linux·运维·ubuntu
北 染 星 辰18 小时前
无源光网络-PON
网络
WiChP18 小时前
【V0.1B5】从零开始的2D游戏引擎开发之路
java·服务器·数据库
小樱花的樱花19 小时前
C++ new和delete用法详解
linux·开发语言·c++
APIshop20 小时前
Java获取京东商品详情接口(item_get)实战指南
java·linux·数据库
Cx330❀20 小时前
一文吃透Linux System V共享内存:原理+实操+避坑指南
大数据·linux·运维·服务器·人工智能
OPHKVPS20 小时前
Anthropic 为 Claude Code 推出“自动模式”:AI 编码工具迈向更高自主性
网络·人工智能·安全·ai
薛定谔的悦20 小时前
储能系统(EMS)核心架构解析:充放电控制、防逆流、防过载与 PID 调节
linux·运维·架构
志栋智能20 小时前
超自动化运维的终极目标:让系统自治运行
运维·网络·人工智能·安全·自动化