树莓派4B Ubuntu22.04 eth0仅分配IPv6无法为直连设备分配IPv4
树莓派4B Ubuntu 22.04 双网卡网络配置故障修复方案
背景信息
配置需求
- wlan0接口接入上游无线网络,通过上游路由器DHCP自动分配IP实现联网
- eth0接口通过网线直连仅支持IPv4协议的终端设备,由树莓派为直连设备分配IPv4地址,实现双向通信
故障现象
- eth0接口默认仅分配IPv6地址,无法为直连的IPv4设备分配地址
- 目标终端直连Windows电脑时可自动获取169.254.15.70链路本地地址,直连树莓派eth0后,树莓派发往该终端的所有请求超时无响应
- 尝试两种全局禁用IPv6的操作后,第一种无任何效果,第二种直接导致eth0接口IPv4网络完全失效
设备环境
- 硬件:树莓派4B rev 1.5
- 系统:Ubuntu Server 22.04 LTS
修复步骤
注意:Ubuntu 22.04的网络管理组件对IPv6存在基础依赖,全局禁用IPv6会导致接口IPv4配置加载异常,无需禁用IPv6即可实现需求,首先需要还原之前错误修改的IPv6禁用配置。
步骤1:还原错误配置,恢复基础网络
执行以下命令还原sysctl、grub中修改的IPv6禁用参数,重启后恢复网络初始状态:
# 清理sysctl.conf中的IPv6禁用配置 sudo sed -i '/net.ipv6.conf.all.disable_ipv6/d' /etc/sysctl.conf sudo sed -i '/net.ipv6.conf.default.disable_ipv6/d' /etc/sysctl.conf sudo sed -i '/net.ipv6.conf.lo.disable_ipv6/d' /etc/sysctl.conf sudo sysctl -p # 清理grub启动参数中的IPv6禁用配置(如果之前修改过) sudo sed -i 's/ipv6.disable=1//g' /etc/default/grub sudo update-grub sudo reboot
重启后执行ip a确认wlan0已正常获取上游DHCP分配的IP,可正常访问外网。
步骤2:通过netplan配置eth0静态IPv4地址
Ubuntu 22.04默认使用netplan管理网络,先执行ls /etc/netplan/查看目录下的配置文件名(通常为00-installer-config.yaml、50-cloud-init.yaml这类名称),编辑对应配置文件:
sudo nano /etc/netplan/替换为你的实际配置文件名.yaml
注意:YAML文件严格要求缩进为2个空格,禁止使用Tab键;原有wlan0的wifi配置全部保留,仅新增/修改eth0段配置
参考配置如下:
network: ethernets: eth0: addresses: - 192.168.100.1/24 # 为eth0配置的静态IPv4地址,需和wlan0所在网段不冲突 dhcp4: no # 关闭eth0的DHCP客户端,不从外部获取IP optional: true wifis: # 此处保留原有wlan0的所有配置,不要修改 version: 2
保存退出后执行以下命令应用配置:
sudo netplan apply
执行ip a确认eth0已正确绑定192.168.100.1/24的IPv4地址。
步骤3:配置DHCP服务为直连终端分配IPv4地址
使用dnsmasq作为轻量DHCP服务器,安装并配置:
sudo apt update sudo apt install -y dnsmasq
编辑dnsmasq主配置文件:
sudo nano /etc/dnsmasq.conf
在文件末尾追加以下配置:
interface=eth0 # 仅监听eth0接口 listen-address=192.168.100.1 # 绑定eth0的静态IP bind-interfaces # 不监听其他接口,避免影响wlan0正常网络 dhcp-range=192.168.100.10,192.168.100.200,255.255.255.0,24h # 分配的IP地址段、子网掩码、租期 dhcp-option=3,192.168.100.1 # 为终端下发网关地址 dhcp-option=6,192.168.100.1 # 为终端下发DNS地址
保存退出后重启服务并设置开机自启:
sudo systemctl restart dnsmasq sudo systemctl enable dnsmasq
步骤4:配置转发与NAT规则
开启内核IPv4转发,配置NAT规则实现eth0和wlan0网段的通信,若需要直连终端通过树莓派访问外网也可直接生效:
# 开启内核IPv4转发 echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf sudo sysctl -p # 安装持久化工具保存iptables规则,避免重启后丢失 sudo apt install -y iptables-persistent # 配置NAT伪装与转发规则 sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE sudo iptables -A FORWARD -i eth0 -o wlan0 -j ACCEPT sudo iptables -A FORWARD -i wlan0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT # 保存规则 sudo netfilter-persistent save
验证与排查
- 验证连通性:将终端通过网线直连eth0,重启终端网络后查看终端IP,确认获取到192.168.100.0/24网段地址;在树莓派端ping终端IP、终端端ping 192.168.100.1,确认无丢包
- DHCP分配失败排查:先确认网线物理连接正常,执行
sudo systemctl status dnsmasq检查服务运行状态,可执行sudo tcpdump -i eth0 port 67 or port 68抓包确认是否收到终端的DHCP请求 - ping不通排查:执行
iptables -L -n、iptables -t nat -L -n确认转发与NAT规则正常加载,检查终端防火墙是否禁ping
内容的提问来源于stack exchange,提问作者MarcomUR
相关产品推荐
相关产品推荐

