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 服务。