尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

从零搭建嵌入式开发环境:手把手教你用Ubuntu 22.04为ARM/Linux开发板配置网关和DNS

从零搭建嵌入式开发环境:手把手教你用Ubuntu 22.04为ARM/Linux开发板配置网关和DNS 从零构建嵌入式开发网络中枢Ubuntu 22.04下的ARM/Linux开发板网关与DNS实战指南当你的工作台上同时摆放着三块不同架构的开发板——可能是树莓派4B、全志H616和StarFive VisionFive 2每块板子都需要访问GitHub拉取代码、从apt仓库安装依赖、或者向内部CI服务器提交构建结果。此时最崩溃的瞬间莫过于反复插拔网线切换网络或是发现某块板子的DNS解析突然失效。本文将带你用一台Ubuntu工作站构建可同时服务多架构开发板的智能网络中枢系统。1. 网络架构设计与硬件选型嵌入式开发的网络需求远比能上网复杂。我们需要考虑多设备并行调试时的IP冲突、DNS配置的持久性、跨子网通信隔离等问题。典型的拓扑结构中Ubuntu主机承担着三重角色网关路由器通过NAT转发实现开发板对外访问DNS缓存服务器加速解析并避免/etc/resolv.conf被覆盖防火墙守卫保护开发环境免受外部扫描硬件配置建议多网口方案推荐使用PCIe转4口千兆网卡如Intel I350-T4比USB网卡更稳定交换机选择管理型交换机如TP-Link TL-SG108E支持VLAN划分线缆管理使用不同颜色网线区分不同子网如黄色-调试网、蓝色-数据网注意避免使用USB 2.0接口的网卡其实际吞吐量往往不足100Mbps2. Ubuntu主机的高级网络配置2.1 多子网IP规划我们为不同架构的开发板划分独立子网便于流量监控和QoS管理子网用途网段网关IP支持架构主调试网络192.168.10.0/24192.168.10.1ARM Cortex-A备用调试网络192.168.20.0/24192.168.20.1RISC-V数据通信网络192.168.30.0/24192.168.30.1所有设备配置示例使用Netplan# /etc/netplan/01-multinet.yaml network: version: 2 ethernets: enp3s0f0: # 外网网卡 dhcp4: true enp3s0f1: # ARM子网 addresses: [192.168.10.1/24] enp3s0f2: # RISC-V子网 addresses: [192.168.20.1/24] enp3s0f3: # 数据子网 addresses: [192.168.30.1/24]2.2 内核参数与防火墙优化除了基础的ip_forward还需要调整TCP栈参数以适应嵌入式设备特性# /etc/sysctl.d/99-embedded.conf net.ipv4.ip_forward1 net.ipv4.tcp_timestamps0 # 避免旧内核兼容问题 net.ipv4.tcp_tw_reuse1 # 快速回收TIME-WAIT连接 net.ipv4.tcp_syncookies1 # 防御SYN FloodUFW防火墙规则需要精细控制sudo ufw allow in on enp3s0f1 # 允许ARM子网入站 sudo ufw allow in on enp3s0f2 # 允许RISC-V子网入站 sudo ufw route allow in on enp3s0f1 out on enp3s0f0 # ARM子网NAT转发 sudo ufw route allow in on enp3s0f2 out on enp3s0f0 # RISC-V子网NAT转发3. 企业级DNS解决方案3.1 systemd-resolved高级配置避免直接修改/etc/resolv.conf改用systemd-resolved作为缓存服务器# /etc/systemd/resolved.conf [Resolve] DNS8.8.8.8 208.67.222.222 Domains~local ~embedded Cacheyes DNSStubListenerno # 禁用本地监听为开发板创建专属DNS配置sudo mkdir -p /etc/systemd/resolved.conf.d echo -e [Resolve]\nDNS192.168.10.1 | sudo tee /etc/systemd/resolved.conf.d/arm.conf3.2 dnsmasq混合部署当需要更复杂的DNS功能时dnsmasq是更好的选择# /etc/dnsmasq.d/embedded.conf interfaceenp3s0f1,enp3s0f2 # 仅监听内网接口 dhcp-rangeenp3s0f1,192.168.10.50,192.168.10.150,12h dhcp-host00:11:22:33:44:55,192.168.10.101 # 静态IP绑定 server/local/192.168.30.100 # 内部域名解析4. 多架构开发板配置实战4.1 ARM开发板配置以Debian系为例永久网络配置需写入/etc/network/interfacesauto eth0 iface eth0 inet static address 192.168.10.101 netmask 255.255.255.0 gateway 192.168.10.1 dns-nameservers 192.168.10.1使用resolvectl避免DNS配置被覆盖sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf sudo resolvectl dns eth0 192.168.10.14.2 RISC-V开发板特殊考量某些RISC-V开发板需要额外MTU设置# /etc/network/interfaces.d/eth0 post-up /sbin/ifconfig eth0 mtu 1400 # 适应某些FPGA板载网卡4.3 实时操作系统配置差异QNX与Linux的主要命令对比功能Linux命令QNX命令设置静态IPip addr addifconfig eth0 192.168.x.x添加默认路由ip route add defaultroute add default 192.168.x.x查看路由表ip route shownetstat -rn5. 网络诊断与性能调优5.1 实时流量监控使用nftables统计各开发板的流量sudo nft add table inet traffic sudo nft add chain inet traffic output { type filter hook output priority 0 \; } sudo nft add rule inet traffic output ip daddr 192.168.10.101 counter5.2 延迟优化技巧调整ICMP响应频率减少开发板ping延迟echo 100 /proc/sys/net/ipv4/icmp_echo_ignore_all echo 50 /proc/sys/net/ipv4/icmp_ratelimit5.3 自动化测试脚本开发板网络连通性测试脚本示例#!/usr/bin/env python3 import subprocess import socket def test_connection(ip): try: subprocess.check_call([ping, -c, 3, ip]) print(fPing to {ip} succeeded) return True except subprocess.CalledProcessError: print(fPing to {ip} failed) return False def test_dns(hostname): try: socket.gethostbyname(hostname) print(fDNS resolution for {hostname} succeeded) return True except socket.gaierror: print(fDNS resolution for {hostname} failed) return False在实际项目中这套网络架构已经稳定支持了包含5块ARM开发板和3块RISC-V开发板的混合调试环境。最关键的收获是为每个子网单独配置的QoS策略确保了编译服务器的SSH连接始终优先于开发板的apt流量。
返回列表