本页大纲

路由器搭建网络小记

前言

路由器不只是家里连接互联网的盒子,它也是一个小型网络实验室。DHCP、DNS、NAT、QoS、VPN 这些概念,都能在路由器配置里找到对应的开关、规则和现象

这篇文章会以 OpenWrt 为例,从家庭网络拓扑开始,一步步配置内网地址分配、域名解析、外网访问、网络隔离、流量控制和远程连接

目标不是背概念,而是把抽象协议变成可以观察、可以修改、可以排错的配置项

一、先理解家庭网络拓扑

LAN 与 WAN

LAN_WAN

在配置任何服务前,先要理解路由器把网络分成了两侧:面向家里设备的一侧叫 LAN,面向运营商和互联网的一侧叫 WAN

  • LAN(Local Area Network):局域网,通常使用 192.168.x.x10.x.x.x 这类私有地址
  • WAN(Wide Area Network):广域网,通常连接运营商网络,可能拿到公网 IP,也可能处在上级 NAT 后面

在 OpenWrt 中,LAN 常见接口是 br-lan,WAN 常见接口是 eth0eth1pppoe-wan

bash
ip addr show
txt
br-lan: 192.168.1.1/24
wan: 由 ISP、光猫或上级路由分配地址

网关、私有 IP 与公网 IP

局域网设备通常不会直接暴露在互联网上。电脑、手机、NAS 拿到的是私有 IP,而路由器的 LAN 地址就是这些设备访问外网时的默认网关

常见家庭网络可以简化成下面这条路径

txt
手机 / 电脑 / NAS -> 路由器 LAN -> 路由器 WAN -> 光猫 / ISP -> Internet

理解这条路径后,后面的 DHCP、DNS、NAT、DDNS、VPN 都会变得更容易:它们分别解决地址分配、名字解析、地址转换、动态入口和远程连接问题

NAT:多台设备共享公网出口

NAT

家庭网络里通常有很多设备,但运营商只给一个公网出口,甚至只给上级路由后的私有地址。NAT 就负责让多台内网设备共享这个出口访问互联网

NAT(Network Address Translation,网络地址转换)会把内网设备的源地址转换成路由器 WAN 侧地址,并维护连接表。回包到达路由器后,再根据连接表转回对应的内网设备

bash
iptables -t nat -L -n -v
bash
# 将外网 8080 端口转发到内网服务器 80 端口
iptables -t nat -A PREROUTING -p tcp --dport 8080 \
  -j DNAT --to-destination 192.168.1.50:80

二、让内网设备自动联网

DHCP 是什么

DHCP

DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)负责自动给设备分配 IP 地址、网关、DNS 和租约时间

没有 DHCP 时,每台设备都要手动填写 IP、子网掩码、网关和 DNS。设备一多,地址冲突和配置错误就会变得很常见

DHCP 地址池配置

DHCP 地址池决定哪些地址可以自动分配。比如路由器地址是 192.168.1.1,可以把 .100.249 留给普通终端,把 .2.99 留给服务器、NAS、打印机等固定设备

bash
uci set dhcp.lan.dhcp='server'
uci set dhcp.lan.interface='lan'
uci commit dhcp
bash
uci set dhcp.lan.start='100'
uci set dhcp.lan.limit='150'
uci set dhcp.lan.leasetime='12h'
uci commit dhcp
/etc/init.d/dnsmasq restart
bash
uci show dhcp

静态 IP 绑定

DHCP 也可以为指定设备保留固定地址。这样 NAS、开发机、打印机这类设备既能继续使用自动配置,又不会因为租约变化导致访问地址改变

bash
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 是什么

DNS

DHCP 解决“设备拿什么地址”的问题,DNS 解决“名字对应哪个地址”的问题。访问 example.com 时,系统会先通过 DNS 查询它对应的 IP,再建立网络连接

在家庭网络中,路由器通常既会把上游 DNS 分发给终端,也可以作为本地 DNS,为 NAS、开发机、智能家居提供内网域名

上游 DNS 配置

上游 DNS 是路由器向外查询域名时使用的服务器。常见选择包括 Cloudflare、Google、阿里 DNS,也可以使用运营商默认 DNS

txt
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.6
bash
uci 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 restart
bash
uci 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

bash
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 restart
bash
nslookup nas.local 192.168.1.1
ping nas.local

四、让外网能找到家里的网络

DDNS 是什么

DDNS

DDNS(Dynamic DNS,动态域名系统)用于解决家庭宽带公网 IP 变化的问题。公网 IP 变了以后,路由器会把新地址同步给 DDNS 服务商

如果家里没有公网 IP,DDNS 只能解析到上级网络地址,外网仍然无法直接连进来。这时需要公网 IP、端口映射、IPv6、内网穿透或 VPN 中继等方案

DDNS 工作流程

DDNS 的核心流程很简单:路由器检测 WAN 侧地址变化,调用服务商接口更新域名记录,外网访问域名时解析到最新地址

txt
公网 IP 变化 -> 路由器检测 -> 更新 DDNS 记录 -> 外网通过域名访问

DDNS 配置与测试

OpenWrt 可以通过 ddns-scripts 配置 DDNS。下面用 DuckDNS 和 Cloudflare 作为例子

bash
opkg update
opkg install ddns-scripts luci-app-ddns
bash
uci 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 restart
bash
uci 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
bash
/etc/init.d/ddns status
logread | grep ddns
nslookup yourdomain.duckdns.org

五、开放服务与远程访问

端口转发与端口触发

端口转发适合固定服务,比如把外网 8080 转发到内网 NAS 的 80。它的规则长期存在,外部连接可以直接命中这条规则

端口触发更像临时规则:当内网设备先发起某个出站连接后,路由器才短时间打开对应入站端口。它常用于游戏、语音、P2P 等场景

特性端口转发端口触发
开放方式长期开放动态开放
绑定对象固定内网 IP触发连接的设备
常见场景NAS、Web 服务、游戏服务器游戏、语音、P2P
配置风险更高相对更低

OpenWrt 上更推荐用防火墙配置管理端口转发,而不是直接手写临时 iptables 规则

bash
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 restart
bash
uci show firewall
iptables -t nat -L -n -v

WireGuard VPN

VPN

VPN(Virtual Private Network,虚拟专用网络)通过加密隧道连接远程设备。相比直接暴露 NAS、SSH、Web 服务,VPN 通常是更安全的远程访问方式

路由器可以作为 VPN 服务器,让手机和笔记本从外网安全访问家中设备。也可以作为 VPN 客户端,把部分或全部流量转发到 VPN 提供商

协议速度安全性配置难度
WireGuard很快简单
OpenVPN中等较复杂
IPSec复杂
PPTP简单
bash
opkg update
opkg install wireguard-tools luci-app-wireguard
bash
wg 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
ini
[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 = 25
bash
uci 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 restart

VPN 客户端模式

当路由器作为 VPN 客户端时,它会主动连接 VPN 服务端。常见用途是让某些设备、某些网段或所有流量通过 VPN 出口

bash
opkg update
opkg install openvpn-openssl luci-app-openvpn
bash
openvpn --config /etc/openvpn/client.ovpn --daemon
bash
ip addr show tun0
curl ifconfig.me

六、复杂网络场景

静态路由

staticroute

静态路由用于告诉路由器:去某个目标网段时,不走默认网关,而是交给指定的下一跳设备

它常见于多子网、旁路由、站点到站点 VPN、实验室网络等场景。比如 192.168.2.0/24 在另一台路由器后面,就需要加一条到这个网段的路由

bash
ip route add 192.168.2.0/24 via 192.168.1.254
bash
uci 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 restart
bash
ip route show
uci show network | grep route

访客网络与网络隔离

访客网络的目标是让访客能上网,但不能访问主网络中的 NAS、打印机、开发机和智能家居设备

实现思路是创建独立接口、独立地址段、独立 DHCP,再通过防火墙只允许访客网络转发到 WAN,拒绝访问 LAN

2.4GHz 与 5GHz

频段优势劣势适用场景
2.4GHz覆盖广、穿墙强速度较慢、干扰多远距离、智能家居
5GHz速度快、干扰少覆盖较小、穿墙弱近距离、高速设备

配置访客网络

bash
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 network
bash
uci 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 dhcp
bash
uci 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 reload
bash
uci 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

QoS(Quality of Service,服务质量)关注的不是数据包能不能到达,而是谁应该优先到达。它适合解决下载占满带宽后,会议、游戏、语音变卡的问题

OpenWrt 上常用 SQM 做队列管理。配置时不要直接填运营商宣传带宽,通常先测速,再设置成实测上下行的 90% 到 95%

bash
opkg update
opkg install sqm-scripts luci-app-sqm
bash
uci 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 restart
bash
tc qdisc show
tc class show

常用诊断命令

网络排障时,先确认链路是否通,再确认 DNS 是否正常,最后看路由、端口和防火墙

下面这些命令是在自己的电脑上执行,用来判断本机到路由器、DNS 和外网之间哪一段出了问题

bash
ping -c 4 8.8.8.8
traceroute google.com
bash
ping -c 4 8.8.8.8
traceroute google.com
powershell
Test-Connection 8.8.8.8 -Count 4
tracert google.com
bash
nslookup google.com
dig google.com
bash
nslookup google.com
dig google.com
powershell
nslookup google.com
Resolve-DnsName google.com
bash
ss -tuln
netstat -tuln
bash
lsof -iTCP -sTCP:LISTEN -n -P
netstat -anv | grep LISTEN
powershell
netstat -ano
Get-NetTCPConnection -State Listen
bash
nmap -sn 192.168.1.0/24
bash
nmap -sn 192.168.1.0/24
powershell
nmap -sn 192.168.1.0/24

nmap 不是 Windows、Linux、macOS 的系统内置命令,需要先安装后再使用

bash
ssh root@192.168.1.1
bash
ssh root@192.168.1.1
powershell
ssh root@192.168.1.1
Test-NetConnection 192.168.1.1 -Port 22

防火墙与基础安全

安全配置的原则是少暴露、勤更新、强认证。能用 VPN 访问的服务,就尽量不要直接暴露到公网

bash
uci show firewall
iptables -L -n -v
bash
iptables -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 优化体验,防火墙和安全设置控制风险

把这些配置真正跑一遍,比单独背协议定义更有效。因为你能看到每个概念在哪里生效,也能在出错时知道应该从哪一层开始排查

参考资源