enp4s0
向开发板共享 wlp5s0
网络enp4s0
设置静态 IPsudo ip addr flush dev enp4s0 # 清除旧配置(可选)
sudo ip addr add 192.168.100.1/24 dev enp4s0
sudo ip link set enp4s0 up
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
编辑 /etc/sysctl.conf
:
sudo nano /etc/sysctl.conf
取消注释或添加:
net.ipv4.ip_forward=1
使其生效:
sudo sysctl -p
sudo iptables -t nat -A POSTROUTING -o wlp5s0 -j MASQUERADE
可选:让其开机自动生效(推荐):
sudo apt install iptables-persistent
sudo netfilter-persistent save
enp4s0
网口192.168.100.x
的 IP,并可以访问外网(如 ping 8.8.8.8
)dnsmasq
是否生效:journalctl -u dnsmasq
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 地址。
确认 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
enp4s0
(通过网线)ping
或串口查看其分配的 IP,或在主机上用以下命令查看分配情况:cat /var/lib/misc/dnsmasq.leases
你应该看到类似这样的内容:
1719593089 02:42:ac:11:00:02 192.168.100.20 * *
在开发板上执行:
ping 192.168.100.1 # 主机 enp4s0
ping 8.8.8.8 # 外网(测试 NAT)
ping google.com # 测试 DNS 是否正常
重新运行(如果未做或未保存):
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)?
你的主机 link-PC
正在做 NAT(伪装成 wlp5s0
的 IP 上网),但 NAT 默认不允许 从外网访问内网设备(比如开发板),所以 192.168.1.x 上的设备无法直接访问开发板的 IP(如 192.168.100.10)。
你可以让主机将某个端口转发到开发板,例如把主机的 192.168.1.137:2222
转发给开发板的 192.168.100.10:22
(SSH):
dnsmasq.leases
查看)192.168.1.137:2222
访问开发板的 22
端口(SSH)# 假设开发板 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
ssh [email protected] -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 服务。