# 路由器做出口网关配置:NAT、DHCP 与回程路由 ## 场景 一条宽带进办公室,路由器要一口气把出口的活全干了:拨号/静态地址、给内网发地址、让内网上网(NAT)、再把内网多网段的路由理顺。这篇是完整的一套,缺一样就有一半机器上不了网。 ## 前置条件 - 运营商给的接入方式:PPPoE 账号密码,或者静态 IP + 网关 + 掩码 - 规划好内网网段,例:办公 `192.168.10.0/24`,服务器 `192.168.20.0/24` - 路由器接口够用(不够就先上三层交换机做 VLAN,路由器只做出口,见「坑」) - 内网如果有三层设备,它的网段和互联地址要提前定好 ## 配置 **华为 AR 系列:** ```bash system-view sysname RT-Edge # 外网口(静态地址;PPPoE 见下面「坑」) interface GigabitEthernet0/0/0 ip address 1.2.3.4 255.255.255.0 quit ip route-static 0.0.0.0 0.0.0.0 1.2.3.1 # 内网口 interface GigabitEthernet0/0/1 ip address 192.168.10.1 255.255.255.0 quit # NAT:哪些网段允许上网 acl 2000 rule 5 permit source 192.168.10.0 0.0.0.255 rule 10 permit source 192.168.20.0 0.0.0.255 quit interface GigabitEthernet0/0/0 nat outbound 2000 quit # DHCP:给办公网发地址 dhcp enable ip pool office network 192.168.10.0 mask 255.255.255.0 gateway-list 192.168.10.1 dns-list 223.5.5.5 114.114.114.114 excluded-ip-address 192.168.10.1 192.168.10.20 lease day 7 quit interface GigabitEthernet0/0/1 dhcp select global quit # 回程路由:内网还有别的网段,指给三层交换机 ip route-static 192.168.20.0 255.255.255.0 192.168.10.254 # DNS 代理解析(可选,让内网直接用路由器当 DNS) dns resolve dns proxy enable save ``` **H3C(Comware V7):** ```bash system-view sysname RT-Edge interface GigabitEthernet0/0 ip address 1.2.3.4 24 quit ip route-static 0.0.0.0 0 1.2.3.1 interface GigabitEthernet0/1 ip address 192.168.10.1 24 quit acl basic 2000 rule 5 permit source 192.168.10.0 0.0.0.255 rule 10 permit source 192.168.20.0 0.0.0.255 quit interface GigabitEthernet0/0 nat outbound 2000 quit dhcp enable dhcp server ip-pool office network 192.168.10.0 mask 255.255.255.0 gateway-list 192.168.10.1 dns-list 223.5.5.5 114.114.114.114 forbidden-ip 192.168.10.1 192.168.10.20 quit interface GigabitEthernet0/1 dhcp select server quit ip route-static 192.168.20.0 24 192.168.10.254 dns proxy enable save force ``` ## 验证 ```bash display ip interface brief # 内外网口地址都对 display ip routing-table # 默认路由指向运营商网关 display nat outbound # NAT 规则挂在外网口 display dhcp server ip-in-use # 内网机器拿到地址了 display nat session table # 有人上网时能看到会话 ping -a 192.168.10.1 223.5.5.5 # 用内网口作源 ping 外网 ``` 从一台内网电脑依次测:`ping 192.168.10.1` → `ping 1.2.3.1` → `ping 223.5.5.5` → `nslookup baidu.com`。 哪一步断,问题就在哪一层,别一上来就怀疑 NAT。 ## 回滚 ```bash undo nat outbound 2000 # 先撤 NAT undo ip pool office # 撤地址池 undo dhcp enable undo ip route-static 0.0.0.0 0.0.0.0 1.2.3.1 ``` 断开外网线是最快的止损,内网互通不受影响。 ## 坑 !!! note "内网多网段,最容易漏的是回程路由" 路由器只认得直连的 `192.168.10.0/24`。如果服务器网段 `192.168.20.0/24` 挂在三层交换机下面, 路由器必须有 `ip route-static 192.168.20.0 ... 192.168.10.254`, 三层交换机也要有指回路由器的默认路由。**两边都配,缺一边就是单向不通。** - NAT 的 ACL 只写内网网段,**不要**把外网地址写进去,会把自己 NAT 掉。 - `excluded-ip-address` / `forbidden-ip` 要避开服务器、打印机、AP 这些自己配了静态地址的设备,不然会撞地址。 - PPPoE 接入时外网口用 `dialer` 或 `pppoe-client`,不能直接配 IP,命令和静态接入完全不同。 - 改 DNS 之前先确认运营商有没有劫持;内网用 `223.5.5.5` 这类公共 DNS 比用运营商 DNS 稳。 - 会话表满了新连接会失败:`display nat session table` 数量接近上限时,看是不是有人在扫内网。 - 双出口时默认路由只留一条,另一条用策略路由分流,不然会来回切(见 [策略路由(PBR)](策略路由(PBR).md))。 - 路由器接口不够时,正确做法是**三层交换机做 VLAN 间路由 + 路由器只做出口**,把 `192.168.10.0/24` 这类网段都放到交换机上,路由器只需要一条回程静态路由。