路由器搭建网络小记
前言
路由器不只是家里连接互联网的盒子,它也是一个小型网络实验室。DHCP、DNS、NAT、QoS、VPN 这些概念,都能在路由器配置里找到对应的开关、规则和现象
这篇文章会以 OpenWrt 为例,从家庭网络拓扑开始,一步步配置内网地址分配、域名解析、外网访问、网络隔离、流量控制和远程连接
目标不是背概念,而是把抽象协议变成可以观察、可以修改、可以排错的配置项
一、先理解家庭网络拓扑
LAN 与 WAN

在配置任何服务前,先要理解路由器把网络分成了两侧:面向家里设备的一侧叫 LAN,面向运营商和互联网的一侧叫 WAN
- LAN(Local Area Network):局域网,通常使用
192.168.x.x、10.x.x.x这类私有地址 - WAN(Wide Area Network):广域网,通常连接运营商网络,可能拿到公网 IP,也可能处在上级 NAT 后面
在 OpenWrt 中,LAN 常见接口是 br-lan,WAN 常见接口是 eth0、eth1 或 pppoe-wan
ip addr showbr-lan: 192.168.1.1/24
wan: 由 ISP、光猫或上级路由分配地址网关、私有 IP 与公网 IP
局域网设备通常不会直接暴露在互联网上。电脑、手机、NAS 拿到的是私有 IP,而路由器的 LAN 地址就是这些设备访问外网时的默认网关
常见家庭网络可以简化成下面这条路径
手机 / 电脑 / NAS -> 路由器 LAN -> 路由器 WAN -> 光猫 / ISP -> Internet理解这条路径后,后面的 DHCP、DNS、NAT、DDNS、VPN 都会变得更容易:它们分别解决地址分配、名字解析、地址转换、动态入口和远程连接问题
NAT:多台设备共享公网出口

家庭网络里通常有很多设备,但运营商只给一个公网出口,甚至只给上级路由后的私有地址。NAT 就负责让多台内网设备共享这个出口访问互联网
NAT(Network Address Translation,网络地址转换)会把内网设备的源地址转换成路由器 WAN 侧地址,并维护连接表。回包到达路由器后,再根据连接表转回对应的内网设备
iptables -t nat -L -n -v# 将外网 8080 端口转发到内网服务器 80 端口
iptables -t nat -A PREROUTING -p tcp --dport 8080 \
-j DNAT --to-destination 192.168.1.50:80二、让内网设备自动联网
DHCP 是什么

DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)负责自动给设备分配 IP 地址、网关、DNS 和租约时间
没有 DHCP 时,每台设备都要手动填写 IP、子网掩码、网关和 DNS。设备一多,地址冲突和配置错误就会变得很常见
DHCP 地址池配置
DHCP 地址池决定哪些地址可以自动分配。比如路由器地址是 192.168.1.1,可以把 .100 到 .249 留给普通终端,把 .2 到 .99 留给服务器、NAS、打印机等固定设备
uci set dhcp.lan.dhcp='server'
uci set dhcp.lan.interface='lan'
uci commit dhcpuci set dhcp.lan.start='100'
uci set dhcp.lan.limit='150'
uci set dhcp.lan.leasetime='12h'
uci commit dhcp
/etc/init.d/dnsmasq restartuci show dhcp静态 IP 绑定
DHCP 也可以为指定设备保留固定地址。这样 NAS、开发机、打印机这类设备既能继续使用自动配置,又不会因为租约变化导致访问地址改变
uci add dhcp host
uci set dhcp.@host[-1].name='myserver'
uci set dhcp.@host[-1].mac='AA:BB:CC:DD:EE:FF'
uci set dhcp.@host[-1].ip='192.168.1.50'
uci commit dhcp
/etc/init.d/dnsmasq restart三、让设备能通过名字访问
DNS 是什么

DHCP 解决“设备拿什么地址”的问题,DNS 解决“名字对应哪个地址”的问题。访问 example.com 时,系统会先通过 DNS 查询它对应的 IP,再建立网络连接
在家庭网络中,路由器通常既会把上游 DNS 分发给终端,也可以作为本地 DNS,为 NAS、开发机、智能家居提供内网域名
上游 DNS 配置
上游 DNS 是路由器向外查询域名时使用的服务器。常见选择包括 Cloudflare、Google、阿里 DNS,也可以使用运营商默认 DNS
Cloudflare DNS: 1.1.1.1, 1.0.0.1
Google DNS: 8.8.8.8, 8.8.4.4
阿里 DNS: 223.5.5.5, 223.6.6.6uci set network.wan.peerdns='0'
uci add_list network.wan.dns='1.1.1.1'
uci add_list network.wan.dns='8.8.8.8'
uci commit network
/etc/init.d/network restartuci add_list dhcp.lan.dhcp_option='6,192.168.1.1'
uci commit dhcp
/etc/init.d/dnsmasq restart本地域名解析
本地 DNS 可以让内网设备通过名字访问固定服务。比如把 nas.local 指向 192.168.1.50,之后就不必记住 NAS 的具体 IP
uci add dhcp domain
uci set dhcp.@domain[-1].name='nas.local'
uci set dhcp.@domain[-1].ip='192.168.1.50'
uci commit dhcp
/etc/init.d/dnsmasq restartnslookup nas.local 192.168.1.1
ping nas.local四、让外网能找到家里的网络
DDNS 是什么

DDNS(Dynamic DNS,动态域名系统)用于解决家庭宽带公网 IP 变化的问题。公网 IP 变了以后,路由器会把新地址同步给 DDNS 服务商
如果家里没有公网 IP,DDNS 只能解析到上级网络地址,外网仍然无法直接连进来。这时需要公网 IP、端口映射、IPv6、内网穿透或 VPN 中继等方案
DDNS 工作流程
DDNS 的核心流程很简单:路由器检测 WAN 侧地址变化,调用服务商接口更新域名记录,外网访问域名时解析到最新地址
公网 IP 变化 -> 路由器检测 -> 更新 DDNS 记录 -> 外网通过域名访问DDNS 配置与测试
OpenWrt 可以通过 ddns-scripts 配置 DDNS。下面用 DuckDNS 和 Cloudflare 作为例子
opkg update
opkg install ddns-scripts luci-app-ddnsuci set ddns.myddns=service
uci set ddns.myddns.enabled='1'
uci set ddns.myddns.service_name='duckdns.org'
uci set ddns.myddns.domain='yourdomain.duckdns.org'
uci set ddns.myddns.username='none'
uci set ddns.myddns.password='your-token-here'
uci set ddns.myddns.ip_source='network'
uci set ddns.myddns.ip_network='wan'
uci commit ddns
/etc/init.d/ddns restartuci set ddns.cloudflare=service
uci set ddns.cloudflare.enabled='1'
uci set ddns.cloudflare.service_name='cloudflare.com-v4'
uci set ddns.cloudflare.domain='home.example.com'
uci set ddns.cloudflare.username='your-email@example.com'
uci set ddns.cloudflare.password='your-api-token'
uci set ddns.cloudflare.ip_source='network'
uci set ddns.cloudflare.ip_network='wan'
uci commit ddns
/etc/init.d/ddns restart/etc/init.d/ddns status
logread | grep ddns
nslookup yourdomain.duckdns.org五、开放服务与远程访问
端口转发与端口触发
端口转发适合固定服务,比如把外网 8080 转发到内网 NAS 的 80。它的规则长期存在,外部连接可以直接命中这条规则
端口触发更像临时规则:当内网设备先发起某个出站连接后,路由器才短时间打开对应入站端口。它常用于游戏、语音、P2P 等场景
| 特性 | 端口转发 | 端口触发 |
|---|---|---|
| 开放方式 | 长期开放 | 动态开放 |
| 绑定对象 | 固定内网 IP | 触发连接的设备 |
| 常见场景 | NAS、Web 服务、游戏服务器 | 游戏、语音、P2P |
| 配置风险 | 更高 | 相对更低 |
OpenWrt 上更推荐用防火墙配置管理端口转发,而不是直接手写临时 iptables 规则
uci add firewall redirect
uci set firewall.@redirect[-1].name='NAS-Web'
uci set firewall.@redirect[-1].src='wan'
uci set firewall.@redirect[-1].src_dport='8080'
uci set firewall.@redirect[-1].dest='lan'
uci set firewall.@redirect[-1].dest_ip='192.168.1.50'
uci set firewall.@redirect[-1].dest_port='80'
uci set firewall.@redirect[-1].proto='tcp'
uci commit firewall
/etc/init.d/firewall restartuci show firewall
iptables -t nat -L -n -vWireGuard VPN

VPN(Virtual Private Network,虚拟专用网络)通过加密隧道连接远程设备。相比直接暴露 NAS、SSH、Web 服务,VPN 通常是更安全的远程访问方式
路由器可以作为 VPN 服务器,让手机和笔记本从外网安全访问家中设备。也可以作为 VPN 客户端,把部分或全部流量转发到 VPN 提供商
| 协议 | 速度 | 安全性 | 配置难度 |
|---|---|---|---|
| WireGuard | 很快 | 高 | 简单 |
| OpenVPN | 中等 | 高 | 较复杂 |
| IPSec | 快 | 高 | 复杂 |
| PPTP | 快 | 低 | 简单 |
opkg update
opkg install wireguard-tools luci-app-wireguardwg genkey | tee /etc/wireguard/server_private.key | wg pubkey > /etc/wireguard/server_public.key
wg genkey | tee /etc/wireguard/client_private.key | wg pubkey > /etc/wireguard/client_public.key[Interface]
PrivateKey = <客户端私钥>
Address = 10.0.0.2/24
DNS = 192.168.1.1
[Peer]
PublicKey = <服务器公钥>
Endpoint = your-home-domain.example.com:51820
AllowedIPs = 192.168.1.0/24
PersistentKeepalive = 25uci add firewall rule
uci set firewall.@rule[-1].name='Allow-WireGuard'
uci set firewall.@rule[-1].src='wan'
uci set firewall.@rule[-1].dest_port='51820'
uci set firewall.@rule[-1].proto='udp'
uci set firewall.@rule[-1].target='ACCEPT'
uci commit firewall
/etc/init.d/firewall restartVPN 客户端模式
当路由器作为 VPN 客户端时,它会主动连接 VPN 服务端。常见用途是让某些设备、某些网段或所有流量通过 VPN 出口
opkg update
opkg install openvpn-openssl luci-app-openvpnopenvpn --config /etc/openvpn/client.ovpn --daemonip addr show tun0
curl ifconfig.me六、复杂网络场景
静态路由

静态路由用于告诉路由器:去某个目标网段时,不走默认网关,而是交给指定的下一跳设备
它常见于多子网、旁路由、站点到站点 VPN、实验室网络等场景。比如 192.168.2.0/24 在另一台路由器后面,就需要加一条到这个网段的路由
ip route add 192.168.2.0/24 via 192.168.1.254uci add network route
uci set network.@route[-1].interface='lan'
uci set network.@route[-1].target='192.168.2.0'
uci set network.@route[-1].netmask='255.255.255.0'
uci set network.@route[-1].gateway='192.168.1.254'
uci commit network
/etc/init.d/network restartip route show
uci show network | grep route访客网络与网络隔离
访客网络的目标是让访客能上网,但不能访问主网络中的 NAS、打印机、开发机和智能家居设备
实现思路是创建独立接口、独立地址段、独立 DHCP,再通过防火墙只允许访客网络转发到 WAN,拒绝访问 LAN
2.4GHz 与 5GHz
| 频段 | 优势 | 劣势 | 适用场景 |
|---|---|---|---|
| 2.4GHz | 覆盖广、穿墙强 | 速度较慢、干扰多 | 远距离、智能家居 |
| 5GHz | 速度快、干扰少 | 覆盖较小、穿墙弱 | 近距离、高速设备 |
配置访客网络
uci set network.guest=interface
uci set network.guest.proto='static'
uci set network.guest.ipaddr='192.168.2.1'
uci set network.guest.netmask='255.255.255.0'
uci commit networkuci set dhcp.guest=dhcp
uci set dhcp.guest.interface='guest'
uci set dhcp.guest.start='100'
uci set dhcp.guest.limit='50'
uci set dhcp.guest.leasetime='2h'
uci commit dhcpuci set wireless.guest_radio0=wifi-iface
uci set wireless.guest_radio0.device='radio0'
uci set wireless.guest_radio0.network='guest'
uci set wireless.guest_radio0.mode='ap'
uci set wireless.guest_radio0.ssid='Guest-2.4G'
uci set wireless.guest_radio0.encryption='psk2'
uci set wireless.guest_radio0.key='guestpassword'
uci set wireless.guest_radio0.isolate='1'
uci commit wireless
wifi reloaduci set firewall.guest_zone=zone
uci set firewall.guest_zone.name='guest'
uci set firewall.guest_zone.network='guest'
uci set firewall.guest_zone.input='REJECT'
uci set firewall.guest_zone.output='ACCEPT'
uci set firewall.guest_zone.forward='REJECT'
uci set firewall.guest_wan=forwarding
uci set firewall.guest_wan.src='guest'
uci set firewall.guest_wan.dest='wan'
uci set firewall.guest_lan=rule
uci set firewall.guest_lan.src='guest'
uci set firewall.guest_lan.dest='lan'
uci set firewall.guest_lan.target='REJECT'
uci commit firewall
/etc/init.d/firewall restart七、体验和安全优化
QoS 流量优先级

QoS(Quality of Service,服务质量)关注的不是数据包能不能到达,而是谁应该优先到达。它适合解决下载占满带宽后,会议、游戏、语音变卡的问题
OpenWrt 上常用 SQM 做队列管理。配置时不要直接填运营商宣传带宽,通常先测速,再设置成实测上下行的 90% 到 95%
opkg update
opkg install sqm-scripts luci-app-sqmuci set sqm.eth1=queue
uci set sqm.eth1.enabled='1'
uci set sqm.eth1.interface='eth1'
uci set sqm.eth1.download='95000'
uci set sqm.eth1.upload='20000'
uci set sqm.eth1.script='piece_of_cake.qos'
uci set sqm.eth1.qdisc='cake'
uci commit sqm
/etc/init.d/sqm restarttc qdisc show
tc class show常用诊断命令
网络排障时,先确认链路是否通,再确认 DNS 是否正常,最后看路由、端口和防火墙
下面这些命令是在自己的电脑上执行,用来判断本机到路由器、DNS 和外网之间哪一段出了问题
ping -c 4 8.8.8.8
traceroute google.comping -c 4 8.8.8.8
traceroute google.comTest-Connection 8.8.8.8 -Count 4
tracert google.comnslookup google.com
dig google.comnslookup google.com
dig google.comnslookup google.com
Resolve-DnsName google.comss -tuln
netstat -tulnlsof -iTCP -sTCP:LISTEN -n -P
netstat -anv | grep LISTENnetstat -ano
Get-NetTCPConnection -State Listennmap -sn 192.168.1.0/24nmap -sn 192.168.1.0/24nmap -sn 192.168.1.0/24nmap 不是 Windows、Linux、macOS 的系统内置命令,需要先安装后再使用
ssh root@192.168.1.1ssh root@192.168.1.1ssh root@192.168.1.1
Test-NetConnection 192.168.1.1 -Port 22防火墙与基础安全
安全配置的原则是少暴露、勤更新、强认证。能用 VPN 访问的服务,就尽量不要直接暴露到公网
uci show firewall
iptables -L -n -viptables -A INPUT -i eth0 -p tcp --dport 22 -j DROP基础安全清单可以从这些项开始
- 修改默认管理员密码
- 禁用 WPS
- 使用 WPA2-PSK 或 WPA3
- 关闭不需要的公网端口
- 定期更新 OpenWrt 和插件
- 远程管理优先使用 VPN
- 为访客和 IoT 设备单独划分网络
总结
路由器配置串起了一条很完整的网络学习路径:LAN/WAN 定义边界,NAT 负责内外地址转换,DHCP 自动分配地址,DNS 负责名字解析,DDNS 让动态公网地址可以被稳定访问
在此基础上,端口转发和 VPN 解决远程访问,静态路由和访客网络处理复杂拓扑,QoS 优化体验,防火墙和安全设置控制风险
把这些配置真正跑一遍,比单独背协议定义更有效。因为你能看到每个概念在哪里生效,也能在出错时知道应该从哪一层开始排查
