Ubuntu20.04服务器开启路由转发让局域网内其他电脑通过该服务器连接外网

article/2025/7/15 6:06:11

要让你的 Ubuntu作为路由器,通过 Wi-Fi 上网,并给连接到 UsbNetwork 的设备提供网络,需要做以下配置:


1. 网络拓扑

[互联网] ← (Wi-Fi, wlo1) → [Ubuntu] ← (USB网络/USB以太网, UsbNetwork) → [设备]
  • Ubuntu
    • Wi-Fi(wlo1)已连接互联网(比如家庭路由器)。
    • USB网络(UsbNetwork)连接设备(IP: 192.168.2.x)。
  • 设备
    • 默认网关指向 192.168.2.2(Ubuntu 的 UsbNetwork IP)。

在这里插入图片描述
在这里插入图片描述

2. 在 Ubuntu 上配置路由和 NAT

(1) 启用 IP 转发

sudo sysctl -w net.ipv4.ip_forward=1

永久生效(编辑 /etc/sysctl.conf):

echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

(2) 设置 NAT(让设备通过 Wi-Fi 上网)

sudo iptables -t nat -A POSTROUTING -o wlo1 -j MASQUERADE
sudo iptables -A FORWARD -i eno1 -o wlo1 -j ACCEPT
sudo iptables -A FORWARD -i wlo1 -o eno1 -m state --state RELATED,ESTABLISHED -j ACCEPT

保存 iptables 规则(防止重启失效):

sudo apt install iptables-persistent
sudo netfilter-persistent save

这三条关键的命令解释如下:
当然!这三条 iptables 命令是配置 NAT(网络地址转换)流量转发 的核心规则,用于让连接到 eno1(有线网络)的设备通过 wlo1(Wi-Fi)访问互联网。以下是每条命令的详细解释:


1. sudo iptables -t nat -A POSTROUTING -o wlo1 -j MASQUERADE

作用

启用 源地址转换(SNAT),将来自 eno1(内网)的流量通过 wlo1(外网)转发时,自动修改数据包的 源IP地址,使其看起来是从 Ubuntu 的 wlo1 接口发出的。

关键点
  • -t nat:操作 NAT 表(专门用于地址转换)。
  • -A POSTROUTING:在数据包 离开本机前(Post-Routing)修改源IP。
  • -o wlo1:仅对从 wlo1(Wi-Fi)发出的数据包生效。
  • -j MASQUERADE:动态将内网设备的私有IP(如 192.168.2.x)替换为 wlo1 的当前IP(如 192.168.0.x)。
为什么需要?
  • 内网设备(eno1 下的 192.168.2.x)的IP是私有地址,无法在互联网上路由。
  • 通过 MASQUERADE,外网服务器会将响应包发回 wlo1 的IP,再由 Ubuntu 转发给内网设备。

2. sudo iptables -A FORWARD -i eno1 -o wlo1 -j ACCEPT

作用

允许从 eno1(内网)进入、从 wlo1(外网)离开的流量 通过防火墙

关键点
  • -A FORWARD:操作 FORWARD 链(控制转发的数据包)。
  • -i eno1 -o wlo1:匹配 进入 eno1 且从 wlo1 出去 的流量。
  • -j ACCEPT:允许这些流量通过。
为什么需要?
  • 默认情况下,Linux 的防火墙会阻止转发流量。
  • 此规则明确允许内网设备访问外网的请求通过。

3. sudo iptables -A FORWARD -i wlo1 -o eno1 -m state --state RELATED,ESTABLISHED -j ACCEPT

作用

允许从 wlo1(外网)返回的、与已有连接相关的流量 通过防火墙,回到 eno1(内网)。

关键点
  • -i wlo1 -o eno1:匹配 进入 wlo1 且从 eno1 出去 的流量。
  • -m state --state RELATED,ESTABLISHED:仅允许 已建立的连接(如内网设备发起的请求的响应包)或 相关的新连接(如FTP的数据连接)。
  • -j ACCEPT:允许这些流量通过。
为什么需要?
  • 确保外网服务器返回的响应包能回到内网设备。
  • 阻止从外网主动发起的非法连接(仅允许“回包”),提升安全性。

三者的协作流程

  1. 内网设备192.168.2.100)访问 8.8.8.8
    • 数据包进入 eno1 → 被 FORWARD 规则放行 → 经过 POSTROUTING 时源IP被改为 wlo1 的IP → 从 wlo1 发出。
  2. Google 服务器 返回响应包:
    • 数据包进入 wlo1 → 被状态检测规则识别为 ESTABLISHED → 放行并转发到 eno1 → 到达内网设备。

验证规则是否生效

# 查看NAT规则
sudo iptables -t nat -L -v# 查看FORWARD规则
sudo iptables -L FORWARD -v

输出示例:

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)pkts bytes target     prot opt in     out     source               destination10  1200 MASQUERADE  all  --  any    wlo1    192.168.2.0/24      anywhereChain FORWARD (policy DROP 0 packets, 0 bytes)pkts bytes target     prot opt in     out     source               destination15  1800 ACCEPT     all  --  eno1   wlo1    anywhere             anywhere20  2400 ACCEPT### **(3) 配置 DHCP(可选,自动分配 IP)**
如果你的设备需要自动获取 IP,可以在 Ubuntu 上安装 `isc-dhcp-server`:
```bash
sudo apt install isc-dhcp-server

编辑 /etc/dhcp/dhcpd.conf

subnet 192.168.2.0 netmask 255.255.255.0 {range 192.168.2.100 192.168.2.200;option routers 192.168.2.2;  # 网关指向 Ubuntuoption domain-name-servers 8.8.8.8, 8.8.4.4;
}

指定监听接口(编辑 /etc/default/isc-dhcp-server):

INTERFACESv4="eno1"

启动 DHCP 服务:

sudo systemctl restart isc-dhcp-server

3. 设备端配置

(1) 自动获取 IP(推荐)

  • 确保设备设置为 DHCP 自动获取 IP
  • 设备应该会得到 192.168.2.x 的 IP,网关是 192.168.2.2

(2) 手动设置 IP(如果没有 DHCP)

  • IP: 192.168.2.x(如 192.168.2.100
  • 子网掩码: 255.255.255.0
  • 网关: 192.168.2.2
  • DNS: 8.8.8.8(或你的 ISP DNS)

4. 测试网络

(1) 在设备上测试

ping 192.168.2.2      # 测试到 Ubuntu 的连通性
ping 8.8.8.8          # 测试外网访问
  • 如果 8.8.8.8 能通,但网页打不开,检查 DNS 设置(设备端手动设 8.8.8.8)。

(2) 在 Ubuntu 上检查 NAT

sudo iptables -t nat -L -v  # 查看 NAT 规则是否生效

输出示例:
在这里插入图片描述


5. 常见问题

(1) 设备能 ping 通网关,但无法上网

  • 检查 Ubuntu 的 wlan0 是否正常联网:
    ping 8.8.8.8  # 在 Ubuntu 上测试
    
  • 检查 NAT 规则:
    sudo iptables -t nat -L  # 确保 POSTROUTING 有 MASQUERADE
    

(2) DHCP 不分配 IP

  • 检查 isc-dhcp-server 是否运行:
    sudo systemctl status isc-dhcp-server
    
  • 检查 UsbNetwork 是否已分配 IP:
    ip a show UsbNetwork
    

(3) 重启后失效

  • 确保 iptables 规则已保存:
    sudo netfilter-persistent save
    
  • 确保 net.ipv4.ip_forward=1 已写入 /etc/sysctl.conf

6. 总结

步骤命令/配置作用
1. 启用转发net.ipv4.ip_forward=1让 Ubuntu 转发流量
2. 设置 NATiptables -t nat -A POSTROUTING ...让设备通过 Wi-Fi 上网
3. 配置 DHCPisc-dhcp-server自动分配 IP
4. 设备连接手动或自动获取 IP确保网关指向 192.168.2.2

这样,你的设备就能通过 Ubuntu 的 Wi-Fi 上网了!🚀


http://www.hkcw.cn/article/kWUOgKLbQQ.shtml

相关文章

ONLYOFFICE深度解锁系列.4-OnlyOffice客户端原理-真的不支持多端同步

最近很多客户多要求直接部署onlyoffice服务端,还问能否和onlyoffice的客户端进行文件同步,当时真是一脸懵,还有的是老客户,已经安装了onlyoffice协作空间的,也在问如何配置客户端和协作空间的对接。由于问的人太多了,这里统一回复,先说结论,再说原理: 1.onlyoffice document s…

手撕Java+硅基流动实现MCP服务器教程

手撕Java硅基流动实现MCP服务器教程 一、MCP协议核心概念 MCP是什么 MCP 是 Anthropic (Claude) 主导发布的一个开放的、通用的、有共识的协议标准。 ● MCP 是一个标准协议,就像给 AI 大模型装了一个 “万能接口”,让 AI 模型能够与不同的数据源和工…

BG22L和BG24L精简版蓝牙SoC推动智能物联网走向更广天地

作者:Aashish Chaddha,芯科科技无线产品营销经理 随着物联网(IoT)领域的复杂性和互联性不断提高,对无线设备的需求正在发生变化。它不再只是将数据从A点传输到B点,现在的设备需要更智能、更节能&#xff0…

拉普拉斯噪声

1. 概念 拉普拉斯噪声是一种连续概率分布生成的随机噪声,其核心特点是符合拉普拉斯分布。这种噪声被特意添加到数据(尤其是查询结果或统计量)中,以实现差分隐私这一严格的隐私保护框架。 核心目的: 在保护数据集中的个…

JavaSwing之--JPasswordField

Java Swing之–JPasswordField应用详解 JPasswordField是一个轻量级组件,允许编辑单行文本,不会显示键入的原始字符,而是显示替代文本或图形。 JPasswordField的直接父类是JTextField,它继承了父类中的常用构造方法与普通方法。…

ACS期刊的投稿查重要求

ACS的查重要求在其官网写到:ACS Publications uses the Crossref Similarity Check Powered by iThenticate to screen submitted manuscripts for similarity to published material. Note that your manuscript may be screened during the submission process.&a…

一文速通Python并行计算:11 Python多进程编程-进程之间的数据安全传输-基于队列和管道

一文速通 Python 并行计算:11 Python 多进程编程-进程之间的数据安全传输-基于队列和管道 摘要: Python 多进程中,Queue 和 Pipe 提供进程间安全通信。Queue 依赖锁和缓冲区,保障数据原子性和有序性;Pipe 实现点对点单…

基于云模型与TOPSIS评价算法的综合应用研究

一、理论基础与算法特点 (一)云模型的核心原理 云模型是由李德毅院士于1995年提出的不确定性转换模型,通过三个数字特征量实现定性概念与定量描述的转换: 期望Ex:概念在论域中的中心值 熵En:表征概念的模…

Jenkins 2.479.1安装和邮箱配置教程

1.安装 在JDK安装并设置环境变量完成后,下载官网对应的war版本,在对应目录下打开命令行窗口并输入 java -jar jenkins.war其余参数感兴趣可以自行查阅,这里启动的 jenkins 服务默认占用8080端口,在浏览器输入 localhost:8080进入…

JavaScript正则表达式

参考笔记:JS之正则表达式_js 正则-CSDN博客 目录 一、正则表达式介绍 1. 快速入门案例1 2. 什么是正则表达式 3. 快速入门案例2 4. 正则表达式"按位"描述规则 二、正则表达式的定义方式 三、修饰符 modifiers 四、正则表达式方法 1. test() 2. exec() 3. search…

制作一款打飞机游戏63:自动保存

1.编辑器的自动保存实现 ‌目标‌:将自动保存功能扩展到所有编辑器,包括脑编辑器、模式编辑器、敌人编辑器和动画/精灵编辑器。‌实现方式‌: ‌代码复制‌:将关卡编辑器中的自动保存代码复制到其他编辑器中。‌标记数据变更‌&a…

“百亿补贴”商家承担比例升至70%-80%,京东外卖家也没“余粮”了?

内容/咏鹅 校对/莽夫 今日雷锋网转引新浪财经一则消息,称「京东外卖“百亿补贴”规则再调整:商家承担比例升至70%-80%」。 有多位商家公开爆料,京东外卖将此前平台与商家各承担50%的补贴成本比例,调整为商家承担70%-80%&#xff…

详解Seata的四种事务模式:AT、TCC、SAGA、XA

一、AT 模式(Auto Transaction - 默认模式) 核心原理: 基于 SQL 解析的自动补偿机制,通过代理数据源实现业务无侵入。 工作流程: 关键特性: 自动生成补偿: 前置镜像(Before Image&…

【MySQL系列05】构建99.999%高可用MySQL: 从主从复制到企业级集群架构详解

关键词: MySQL高可用架构、主从复制、读写分离、故障转移、MySQL集群、InnoDB Cluster、Percona XtraDB、MySQL Router、ProxySQL、数据库容灾 摘要: 本文从生活化的超市收银员比喻出发,深入浅出地讲解MySQL高可用架构的构建方法。从基础的主…

力扣刷题Day 65:单词搜索(79)

1.题目描述 2.思路 方法1(自己写的深度优先的回溯方法):遍历网格,每走过一格都将其坐标加入visited集合,然后向上、下、左、右四个方向查找可行路径,如果找到可行路径则一路向下延伸查找,如不可…

多卡训练核心技术详解

多卡训练核心技术详解 多卡训练 主要围绕分布式环境初始化、模型并行化、数据分片和梯度同步展开。下面结合您的代码,详细解释这些核心部分: 并行执行命令 torchrun --nproc_per_node=5 TokenLossMulCard.py 1. 分布式环境初始化 def init_distributed():init_process_…

PDT经理的角色认知

PDT团队 在IPD体系导入过程中,PDT经理(又称LPDT,Leader of Product Development Team)是最关键的角色之一,本篇文章中汉捷咨询就PDT经理的角色认知进行探讨。要认识PDT经理首先需要认识PDT,PDT&#xff08…

历年浙江大学计算机保研上机真题

2025浙江大学计算机保研上机真题 2024浙江大学计算机保研上机真题 2023浙江大学计算机保研上机真题 在线测评链接:https://pgcode.cn/school?classification1 最小包围矩形 题目描述 给定一系列二维平面点的坐标 ( x , y ) (x, y) (x,y),其中 x x…

BKP(备份寄存器)和 RTC(实时时钟)

什么是BKP? 备份寄存器(BackupRegister)是42个16位的寄存器(不同设备存在差异:20字节(中容量和小容量)/84字节(大容量和互联型)),可用来存储 最多…

antDesignVue中a-upload上传组件的使用

工作中需要使用上传组件,记录一下a-upload部分属性用法 1.showUploadList属性使用 使用:showUploadList"{ showRemoveIcon: true ,showDownloadIcon: true }"属性可控制右侧下载,删除图标 2.如何实现回显功能 使用:defaultFileList"fil…