当前位置: 首页 > news >正文

Ubuntu 主机通过 `enp4s0` 向开发板共享网络的完整步骤

✅ 步骤总览:Ubuntu 主机通过 enp4s0 向开发板共享 wlp5s0 网络

1️⃣ 为 enp4s0 设置静态 IP

sudo ip addr flush dev enp4s0  # 清除旧配置(可选)
sudo ip addr add 192.168.100.1/24 dev enp4s0
sudo ip link set enp4s0 up

2️⃣ 安装并配置 dnsmasq(提供 DHCP 给开发板)

sudo apt install dnsmasq

编辑配置文件:

sudo nano /etc/dnsmasq.d/enp4s0.conf

内容如下:

port=0
interface=enp4s0
dhcp-range=192.168.100.10,192.168.100.100,12h

然后重启服务:

sudo systemctl restart dnsmasq

3️⃣ 启用 IP 转发

编辑 /etc/sysctl.conf

sudo nano /etc/sysctl.conf

取消注释或添加:

net.ipv4.ip_forward=1

使其生效:

sudo sysctl -p

4️⃣ 设置 NAT 转发(iptables)

sudo iptables -t nat -A POSTROUTING -o wlp5s0 -j MASQUERADE

可选:让其开机自动生效(推荐):

sudo apt install iptables-persistent
sudo netfilter-persistent save

5️⃣ 连接开发板并测试

  • 将开发板连接到主机 enp4s0 网口
  • 开发板配置为 DHCP 自动获取 IP
  • 正常的话开发板将获得 192.168.100.x 的 IP,并可以访问外网(如 ping 8.8.8.8

✅ 验证命令参考

  • 检查 dnsmasq 是否生效:
journalctl -u dnsmasq
  • 查看 IP 分配情况:
cat /var/lib/misc/dnsmasq.leases
  • 在主机查看是否从开发板收到了数据包:
sudo tcpdump -i enp4s0

很好,dnsmasq 已经成功运行并开始提供 DHCP 服务,日志中明确说明:

dnsmasq[20062]: started, version 2.90 DNS disabled
dnsmasq-dhcp[20062]: DHCP, IP range 192.168.100.10 -- 192.168.100.100, lease time 12h

这意味着你的开发板现在可以通过 DHCP 从主机的 enp4s0 网口获取 IP 地址。


✅ 接下来请验证以下内容:

1️⃣ 检查主机有线网卡(enp4s0)状态

确认 IP 设置是否正确:

ip addr show enp4s0

应该包含:

inet 192.168.100.1/24

如果没有,请执行:

sudo ip addr add 192.168.100.1/24 dev enp4s0
sudo ip link set enp4s0 up

2️⃣ 将开发板连接到 enp4s0(通过网线)

  • 确保开发板设置为自动获取 IP(DHCP 模式)
  • 启动开发板
  • 使用 ping 或串口查看其分配的 IP,或在主机上用以下命令查看分配情况:
cat /var/lib/misc/dnsmasq.leases

你应该看到类似这样的内容:

1719593089 02:42:ac:11:00:02 192.168.100.20 * *

3️⃣ 测试网络连通性

在开发板上执行:

ping 192.168.100.1        # 主机 enp4s0
ping 8.8.8.8              # 外网(测试 NAT)
ping google.com           # 测试 DNS 是否正常

🔁 如果开发板能访问主机但无法上网,请确保主机设置了 NAT:

重新运行(如果未做或未保存):

sudo iptables -t nat -A POSTROUTING -o wlp5s0 -j MASQUERADE

并确保 IP 转发开启:

cat /proc/sys/net/ipv4/ip_forward

如果输出是 0

echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

🧰 如需开机自动生效

可以使用 iptables-persistent

sudo apt install iptables-persistent
sudo netfilter-persistent save

现在的 Ubuntu 主机(link-PC)有两个网络:

  • wlp5s0:连接到主路由器(192.168.1.x 网段)
  • enp4s0:连接开发板,私有局域网(192.168.100.x)

如何让 192.168.1.x 网络中的其他设备(如你的笔记本或路由器)访问开发板(192.168.100.x)?


🔧 问题本质:你当前设置的是 NAT(地址转换),默认阻止反向访问

你的主机 link-PC 正在做 NAT(伪装成 wlp5s0 的 IP 上网),但 NAT 默认不允许 从外网访问内网设备(比如开发板),所以 192.168.1.x 上的设备无法直接访问开发板的 IP(如 192.168.100.10)。


✅ 有效解决方案:使用主机端口转发(DNAT)

你可以让主机将某个端口转发到开发板,例如把主机的 192.168.1.137:2222 转发给开发板的 192.168.100.10:22(SSH):

假设:

  • 开发板的 IP:192.168.100.10(你可以通过 dnsmasq.leases 查看)
  • 你希望通过主机的 192.168.1.137:2222 访问开发板的 22 端口(SSH)

🔁 设置 DNAT 转发规则

# 假设开发板 IP 是 192.168.100.10
sudo iptables -t nat -A PREROUTING -i wlp5s0 -p tcp --dport 2222 -j DNAT --to-destination 192.168.100.10:22# 确保允许转发连接
sudo iptables -A FORWARD -p tcp -d 192.168.100.10 --dport 22 -j ACCEPT

🔄 保存规则(可选但推荐)

sudo apt install iptables-persistent
sudo netfilter-persistent save

🧪 现在测试访问(从其他 192.168.1.x 的设备)

ssh user@192.168.1.137 -p 2222

这实际上就会通过主机中转,访问开发板的 192.168.100.10:22


🧠 补充说明

如果你希望可以访问开发板的 网页服务(如 80 端口)或其他服务,也可以添加类似规则:

# 访问开发板的 HTTP(80)
sudo iptables -t nat -A PREROUTING -i wlp5s0 -p tcp --dport 8080 -j DNAT --to-destination 192.168.100.10:80
sudo iptables -A FORWARD -p tcp -d 192.168.100.10 --dport 80 -j ACCEPT

然后你就可以通过 http://192.168.1.137:8080 访问开发板的 HTTP 服务。


http://www.lqws.cn/news/556291.html

相关文章:

  • 默克树技术原理
  • 组成原理--指令指令集寻址方式的介绍
  • ubuntu-server 与 ubuntu-live-server 的区别 笔记250628
  • Java锁机制知识点
  • 网关ARP防护的措施
  • 【开源初探】基于Qwen2.5VL的OCRFlux
  • vue-28(服务器端渲染(SSR)简介及其优势)
  • LNA设计
  • macOS生成密钥对教程
  • 网络攻防技术
  • WOE值:风险建模中的“证据权重”量化术——从似然比理论到FICO评分卡实践
  • 最后的生还者2:重制版 免安 中文离线运行版+整合包
  • Flutter 使用flutter_inappwebview加载H5 在Windows 11 上应用闪退问题排查与解决方案
  • [幻灯片]分析设计高阶-03行为01-202506更新-GJ-002
  • 系统架构设计师备考之架构设计基础
  • docker安装elasticsearch和kibana
  • bboss jobflow使用介绍
  • Java--面向对象基础--类与方法
  • GitHub 趋势日报(2025年06月27日)
  • spring spi源码
  • 恐怖黎明 决定版 中文 免安 离线运行版
  • 《卷积神经网络到Vision Transformer:计算机视觉的十年架构革命》
  • 【SpringBoot高级】SpringBoot与Kafka深度整合:从入门到企业级实战
  • zookeeper Curator(3):Watch事件监听
  • 使用 Socket.IO 和 TypeScript 由 WebSockets 驱动的聊天应用程序
  • JavaScript中的显式原型与隐式原型:深入理解原型链
  • 车辆车五项查询API: Python 示例
  • Stewart并联结构两自由度正逆解计算和工作空间仿真
  • Word之电子章制作——1
  • 探索钉钉生态中的宜搭:创建与分享应用的新视界