OpenWrt是三大主流路由器固件之一,应用非常广泛。本文对OpenWrt的使用方法进行简明总结,方便初学者入门。
- 0. 参考
- 1. 概述
- 2. 固件编译和更新
- 2.1 固件编译
- 2.2 固件更新
- 3. 路由器配置
- 3.1 VLAN配置
- 3.1.1 UCI命令行配置
- 3.1.2 配置文件配置
- 3.1.3 网页界面配置
- 3.2 路由配置
- 3.2.1 静态路由
- 3.2.2 动态路由
- 3.2.2.1 RIP
- 3.2.2.2 OSPF
- 3.2.3 多播路由
- 3.3 防火墙
- 3.3.1 全状态包检测(SPI)
- 3.3.2 防范常见拒绝服务(DoS)攻击
- 3.3.3 NAT(网络地址转换)
- 3.1 VLAN配置
0. 参考
- OpenWrt中文主页
- OpenWrt GitHub仓库
- 路由器就是开发板
1. 概述
OpenWrt是三大主流路由器固件之一,本质上是是一个高度模块化、高度自动化的嵌入式Linux系统,拥有强大的网络组件和扩展性,常常被用于工控设备、电话、小型机器人、智能家居、路由器以及VOIP设备中。同时,OpenWrt还提供了100
多个已编译好的软件,而且数量还在不断增加,而 OpenWrt SDK更进一步简化了开发软件的工序。
OpenWrt不同于其他许多用于路由器的发行版,它是一个从零开始编写的、功能齐全的、容易修改的路由器操作系统,从而可以添加需要的功能而不引入无用模块,同时支持这些功能工作的Linux
内核又远比绝大多数发行版更新。其架构如下所示:
OpenWrt支持各种处理器架构,无论是对ARM,X86,PowerPC或者MIPS都有很好的支持。OpenWrt支持多达3000
多种软件包,囊括从工具链,到内核,到软件包,再到根文件系统等整个体系。用户只需简单的一个make命令即可方便快速地定制一个具有特定功能的嵌入式系统来作为路由器固件。
OpenWrt支持常见路由协议,包括RIP、OSPF、OLSR、BATMAN等,适用于从小型网络、大型密集网络到无线Ad-hoc网络等各种场景。
OpenWrt支持DMZ(隔离区)、VLAN(虚拟局域网)、虚拟服务器(端口映射)、访问控制列表(ACL)、NAT(网络地址转换)等常用功能模块以及支持如下功能的防火墙:
- 全状态包检测(SPI);
- 防范常见拒绝服务(DoS)攻击;
- 过滤多播/Ping 探测包;
- 日志记录和报表统计;
- 网络攻击检测。
2. 固件编译和更新
2.1 固件编译
OpenWrt最新源码可以通过git工具从OpenWrt GitHub仓库下载:
```bash
$ git clone https://github.com/openwrt/openwrt.git
```
OpenWrt编译建议使用最新的稳定版本(不带rcX字样的tag):
```bash
openwrt$ git tag -l
reboot
v17.01.0
v17.01.0-rc1
v17.01.0-rc2
v17.01.1
...
openwrt$ git checkout vX.X.X -b dev
```
OpenWrt源码中包含基于BuildRoot的构建系统,具体用法可以参考Documentation/Developer guide/Toolchain/Build system usage。
OpenWrt可以通过make menuconfig
进行配置,核心选项包括:
- Target System (Atheros AR7xxx/AR9xxx):处理器平台选择
- Target Profile (Qualcomm Atheros AP147-010 reference board):参考板选择
- LuCI -> 1. Collections -> luci:使能LuCI Web配置界面;
- LuCI -> 2. Modules > Translations -> Chinese (zh-cn):使能中文配置界面
- LuCI > 4. Themes:选择LuCI Web配置界面主题
- Network -> Routing and Redirection -> igmpproxy:IGMP代理支持
- Network -> Routing and Redirection -> quagga:RIP和OSPF支持,需要使能ripd和ospfd;vtysh用于在串口shell中统一配置RIP和OSPF,属于可选项,未选中时可以使用telnet分别连接2602和2604端口配置RIP和OSPF;
- Network -> wpa-supplicant:编译wpa-supplicant包,用以支持无线密码,需要在LuCI配置界面->系统->软件包界面手动安装。
2.2 固件更新
固件更新方式可以使用串口终端和网页配置界面2种方式:
-
串口终端方式
路由器串口一般为标准TTL接口,可以通过USB转TTL模块连接到电脑上,默认波特率一般为115200:连接串口并在U-Boot启动时按任意键中断固件加载;
连接任一路由器网口到PC网口;
-
在
shell
中输入httpd
以启动http服务器,并显示路由器IP:u-boot> httpd enet0 port4 up HTTP server is starting at IP: 10.10.18.1 HTTP server is ready!
手工配置PC的IP地址为路由器IP的同一网段;
使用PC浏览器访问路由器IP以下载固件。
注意:
- 映像下载完成后用户密码为空,需要重新设置;
- 如果浏览器自动跳转到LuCI,则需要更换浏览器或者清除浏览器cache(缓存);
- U-Boot复位命令为
reset
。
-
网页配置界面方式
路由器默认IP为192.168.1.1
,网页配置界面->系统->备份/升级界面中包含固件刷新,可以用于下载固件;注意:- 电脑IP地址采用自动配置方式;
- 连接路由器IP即网关地址,默认密码为空;
- 依次进入LuCI配置界面->系统->备份/升级界面;
- 使用固件刷新方式更新固件。
注意:固件更新完成后用户配置仍然保留。
3. 路由器配置
路由器可以通用过如下两种方式进行配置:
- 终端命令行配置方式:
- 可以使用串口或者
telnet
连接到路由器终端; - 命令行配置时可以采用UCI命令或者
vi <配置文件>
方式;
- 可以使用串口或者
- Web界面配置方式:使用PC浏览器连接路由器IP即网关地址即可。
注意:默认密码为空,可以在终端中使用passwd
命令修改或者在网页配置界面->系统->备份/升级界面中设置。
3.1 VLAN配置
VLAN协议即虚拟局域网, 通过在报文头增加VLAN标签,将网络设备被化分为若干个虚拟的局域网组。OpenWrt支持IEEE 802.1Q
和IEEE 802.1ad VLAN
标准,通过UCI配置接口(/etc/config/network
)和LuCILuci配置界面的交换机页面将路由器中的嵌入式交换机划分为多个VLAN,并在系统中显示为独立的接口。
假定路由器有1个wan口(编号0)和4个LAN口(编号1,2,3,4),使用如下方法将4个LAN口划分为2个VLAN(1和2)。
3.1.1 UCI命令行配置
连接路由器终端;
-
划分VLAN:
OpenWrt# uci set network.@switch_vlan[0].ports='0t 1 2' OpenWrt# uci add network switch_vlan OpenWrt# uci set network.@switch_vlan[1].device='eth1' OpenWrt# uci set network.@switch_vlan[1].vlan='2' OpenWrt# uci set network.@switch_vlan[1].vid='2' OpenWrt# uci set network.@switch_vlan[1].ports='0t 3 4'
-
创建新的LAN接口
lan2
:OpenWrt# uci set network.lan2=interface OpenWrt# uci set network.lan2.ifname='eth1.2' OpenWrt# uci set network.lan2.proto='static' OpenWrt# uci set network.lan2.ipaddr='192.168.3.1' OpenWrt# uci set network.lan2.netmask='255.255.255.0'
-
将默认LAN接口
lan
切换到VLAN1上:OpenWrt# uci set network.lan.ifname='eth1.1'
-
在
lan2
上使能DHCP服务:OpenWrt# uci set dhcp.lan2=dhcp OpenWrt# uci set dhcp.lan2.interface='lan2' OpenWrt# uci set dhcp.lan2.start='100' OpenWrt# uci set dhcp.lan2.limit='150' OpenWrt# uci set dhcp.lan2.leasetime='12h'
-
将
lan2
加入防火墙的lan
区域:OpenWrt# uci set firewall.@zone[0].network='lan lan2'
-
提交修改并复位路由器:
OpenWrt# uci commit OpenWrt# reboot
3.1.2 配置文件配置
连接路由器终端;
-
使用
vi etc/config/network
命令修改etc/config/network
,划分VLAN,切换lan
接口到VLAN1上,并创建新的LAN接口lan2
:... config interface 'lan' ... option ifname 'eth1.1' # 'eth1' ... ... config switch_vlan ... option vid '1' option ports '0t 1 2' config switch_vlan option device 'eth1' option vlan '2' option vid '2' option ports '0t 3 4' config interface 'lan2' option ifname 'eth1.2' option proto 'static' option ipaddr '192.168.3.1' option netmask '255.255.255.0'
-
使用
vi etc/config/dhcp
命令在etc/config/dhcp
末尾增加LAN2的DHCP配置:config dhcp 'lan2' option start '100' option limit '150' option interface 'lan2' option leasetime '12h'
-
使用
vi etc/config/firewall
修改etc/config/firewall
,将lan2
加入防火墙的lan
区域:config zone option name 'lan' option network 'lan lan2' ...
-
复位路由器:
OpenWrt# reboot
3.1.3 网页界面配置
- 使用PC浏览器连接路由器地址即网关地址;
- 进入
网络->交换机
页面,点击添加
按钮添加VLAN2,修改VLAN1配置,并点击保存并应用
按钮: - 进入
网络->接口
页面,点击添加新接口
按钮添加lan2
,对应于VLAN2接口eth1.2
,并点击提交
按钮: - 在刷新出来的新页面中点击
DHCP设置
按钮,设置lan2
的IPv4地址和网关; - 在刷新出来的新页面中点击
防火墙设置
标签,将lan2
加入防火墙的lan
区域,并点击保存并应用
按钮: - 点击
LAN
标签设置lan
接口,点击物理设置
按钮,切换lan
接口到VLAN1接口eth1.1
,并点击保存并应用
按钮:
注意:点击保存并应用
按钮时若界面卡住不再刷新,则将PC网口更换到路由器另外一组VLAN对应的LAN口。
3.2 路由配置
IP路由是路由器最重要的功能。路由是在网络中选择要发送网络流量的路径的过程。报文根据路由表来进行路由。路由可以静态配置,也可以使用路由协议进行自动化的动态配置以减少静态配置工作。
路由表中的路由项,根据目的地址不同可以划分为单播路由和多播路由;根据来源不同可以划分为设置接口IP地址和掩码时自动增加的直连路由、网络管理员手工配置的静态路由和路由协议动态生成的动态路由。
路由状态可以通过LuCI配置界面路由表状态页面查看。
为了方便说明,之后的配置以如下场景为例:
其中:
- 被测路由器WAN口IP地址为
192.168.0.100
,对应网口设备为eth1
,LAN口IP地址为192.168.1.X
; - 邻居路由器WAN口IP地址为
192.168.0.200
,对应网口设备为eth1
,LAN口IP地址为192.168.2.X
。
3.2.1 静态路由
静态路由,是网络管理员通过route
、ip route
等Linux
路由配置命令手工配置的路由,适用于拓扑简单并且稳定的小型网络。
静态路由不能自动适应网络拓扑结构的变化,因此当网络发生故障或网络拓扑发生变化时,必须再次由网络管理员手工修改配置。
除了route
、ip route
等Linux
路由配置命令,OpenWrt同时通过LuCI配置界面提供web方式的静态路由查看和配置命令,即状态界面的路由表页面和网络界面的静态路由页面。
配置方法如下所示:
-
被测路由器:连接终端或者进入LuCI配置界面的静态路由页面,增加WAN口路由规则,将邻居路由器LAN侧IP地址路由到邻居路由器的WAN口IP地址,并关闭防火墙:
OpenWrt# route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.0.200 dev eth1 OpenWrt# /etc/init.d/firewall stop
2.邻居路由器:连接终端或者进入LuCI配置界面的静态路由页面,增加WAN口路由规则,将被测路由器LAN侧IP地址路由到被测路由器的WAN口IP地址,并关闭防火墙:
OpenWrt# route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.0.100 dev eth1
OpenWrt# /etc/init.d/firewall stop
注意:
可以参考静态路由设置实例解析(图文)和route add命令详解;
可以通过LuCI配置界面的静态路由器页面增加静态路由配置,但是无效的路由表项即使保存成功也不会生效,无法在路由表状态页面看到;在终端中使用
route
命令添加无效路由时会提示错误信息;-
需要关闭防火墙或者修改
etc/config/firewall
接受转发包和ping包:config defaults ... option forward ACCEPT # REJECT ... config zone ... option forward ACCEPT # REJECT # option masq 1 option mtu_fix 1 ... # Allow IPv4 ping config rule ... # option icmp_type echo-request ...
3.2.2 动态路由
OpenWrt通过Routing套件中的Quagga软路由提供RIP、OSPF等动态协议路由协议。
Quagga是一个路由软件包,用于为基于TCP / IP的路由服务提供路由协议支持,包括RIPv1,RIPv2,RIPng,OSPFv2,OSPFv3,IS-IS,BGP-4和BGP-4 +等。Quagga还支持特殊的BGP路由反射器和路由服务器行为。除了传统的IPv4路由协议,Quagga还支持IPv6路由协议。通过支持SMUX和AgentX协议的SNMP守护程序,Quagga提供了路由协议MIB。
Quagga体系结构由核心守护程序zebra和一系列协议守护程序组成,用以共同构建路由表。每个主要协议都在其自己的守护程序中实现,并与核心守护程序(zebra)通信以将路由更新传递给zebra;zebra守护程序充当基础Unix内核的抽象层,并通过Unix或TCP流向Quagga客户端提供Zserv API。
Quagga在网络协议栈中的作用是与其他路由器交换路由信息,制定路由和策略决策,并将路由决策安装到Linux内核中,从而允许Linux协议栈做出相应的转发决策。
Quagga通过集成用户界面外壳程序 vtysh来管理所有守护程序。vtysh通过UNIX域套接字连接到每个守护程序,然后充当用户输入的代理。除了统一的前端,vtysh还提供了通过集成配置模式使用单个配置文件来配置所有守护程序的功能,从而避免了为每个守护程序维护单独的配置文件的开销。
3.2.2.1 RIP
Quagga路由套件的ripd
支持RFC2453
中描述的RIPv2
和RFC1058
中描述的RIPv1
。
RIP(Routing Information Protocol,路由信息协议)定义了路由器在互连的一组局域网(LAN)之间移动流量时应如何共享信息,应用较早(最早出现于1981年的Xerox网络系统(XNS)协议套件中)、使用较普遍的内部网关协议(Interior Gateway Protocol,IGP),适用于小型同类网络的一个自治系统(AS)内的路由信息的传递。
RIP是一个用于路由器和主机间交换路由信息的距离向量协议,使用跳数,即metric
来衡量到达目标地址的路由距离。
RIP使用距离矢量算法(Bellman-Ford算法)来决定将数据包放在哪个路径上以到达其目的地。每个RIP路由器维护一个路由表,每30秒向其最近的邻居广播其整个路由表。如果路由器在路由上收到更新,并且新路径更短,它将使用较短路径的长度和下一跳地址更新其表条目。如果新路径较长,它将等待一个抑制时间,以查看以后的更新是否也反映了较高的值。仅当确定新的较长路径稳定时,才会更新表条目。如果路由器崩溃或网络连接断开,则网络会发现这一点,因为该路由器停止向其邻居发送更新,或者停止沿断开的连接发送和接收更新。如果路由表中的给定路由没有在6个连续的更新周期(即180秒)内更新,则RIP路由器将丢弃该路由,并通过其自身的定期更新让网络的其余部分了解问题。
目前,OSPF已在很大程度上取代了RIP,成为最广泛使用的内部网关协议(IGP)。RIP已被取代主要是因为它的简单性以及无法扩展到非常大和复杂的网络。
配置方法如下所示:
-
在被测路由器终端中执行如下命令:
OpenWrt# vi /etc/quagga/ripd.conf
-
将如下内容粘贴到
ripd.conf
中保存退出:# password for telnet connection password zebra # enable RIP router rip # set RIP enable interface by network network 192.168.0.0/24 network 192.168.1.0/24 # enable log and debug log file /etc/quagga/ripd.log debug rip events debug rip packet
在邻居路由器*终端中执行同样步骤,注意将
network 192.168.1.0/24
改为network 192.168.2.0/24
;重启路由器或执行
/etc/init.d/quagga restart
重启quagga
服务;在路由器终端中首先使用
/etc/init.d/firewall stop
关闭防火墙,然后使用route
命令查询动态路由是否已经出现;在路由器终端中使用
vtysh
进入配置终端后输入然后使用show ip rip status
查看RIP信息。
注意:
参考Quagga 配置笔记;
通过
vtysh
配置时需要先使用configure terminal
进入配置终端后再输入配置文本中的命令,具体步骤参考Quagga简介、安装、配置说明;测试时也可以通过
/etc/quagga/ripd.log
和/etc/quagga/ospfd.log
查看日志和调试信息;日志和调试信息在正式版本中可以关掉,节省空间;
-
测试时需要关闭防火墙,或者修改
etc/config/firewall
添加如下防火墙规则,否则无法收到RIP/OSPF报文:config rule option name 'Allow-RIP' option src 'wan' option src_ip '192.168.0.0/24' option src_port 520 option proto 'udp' option target 'ACCEPT' config rule option name 'Allow-OSPF' option src 'wan' option src_ip '192.168.0.0/24' option proto 'ospf' option target 'ACCEPT'
3.2.2.2 OSPF
Quagga路由套件的ospfd
支持RFC 2328
定义的适用于IPv4网络的OSPFv2
。
OSPF(Open Shortest Path First,开放式最短路径优先)是内部网关协议(IGP)系列中最著名的协议,由IETF的OSPF工作组在19世纪80年代中期开发。OSPF具有路由变化收敛速度快、路由更新效率高、无路由环路、支持变长子网掩码(VLSM)和汇总、层次区域划分等优点。OSPF通过邻居关系维护路由,避免定期更新对带宽进行的消耗,适用于大中型网络。在网络中使用OSPF协议后,大部分路由将由OSPF协议自行计算和生成,无须网络管理员人工配置,当网络拓扑发生变化时,协议可以自动计算、更正路由,极大地方便了网络管理。
在网络中配置后,OSPF将侦听邻居并收集所有可用的链路状态数据,以构建其网络中所有可用路径的拓扑图,然后将信息保存在其拓扑数据库(也称为链路状态数据库(LSDB))中。根据收集到的信息,它将使用计算机科学家Edsger W. Dijkstra在1956年开发的称为最短路径优先(SFP)的算法,计算到达每个可访问子网/网络的最佳最短路径。大部分路由将由OSPF协议自行计算和生成,无须网络管理员人工配置,当网络拓扑发生变化时,协议可以自动计算、更正路由,极大地方便了网络管理。
OSPF将自治系统内的路由器划分为路由区域,每个区域都由一组连接的路由器组成,从而简化管理并优化可用资源,并在此基础上进行路由计算。
与RIP协议相比,OSPF使用基于带宽的度量值,选路更加科学。当路由条目更新时,仅发送更新路由(RIP发送整个路由表),减小了线路带宽的消耗,收敛速度快。
配置方法如下所示:
-
在被测路由器串口shell中执行如下命令:
OpenWrt# vi /etc/quagga/ospfd.conf
-
将如下内容粘贴到
ospfd.conf
中保存退出:# password for telnet connection password zebra # enable OSPF router ospf # set OSPF enable interface by network ospf router-id 192.168.1.0 network 192.168.0.0/24 area 0.0.0.0 network 192.168.1.0/24 area 0.0.0.1 # enable log and debug log file /etc/quagga/ospfd.log debug ospf event debug ospf packet all
在邻居路由器终端中执行同样步骤,注意将
network 192.168.1.0/24 area 0.0.0.1
改为network 192.168.2.0/24 area 0.0.0.1
并将router-id
更改为192.168.2.0
;重启路由器或执行
/etc/init.d/quagga restart
重启quagga
服务;在路由器终端中使用
/etc/init.d/firewall stop
关闭防火墙,然后使用route
命令查询动态路由是否已经出现;在路由器终端中使用
vtysh
进入配置终端后输入然后使用show ip ospf database
查看路由数据库。
注意事项参见3.2.2 RIP。
3.2.3 多播路由
多播方式使得服务器可以将一个报文发送到多播地址,然后通过路由器的多播路由支持,使得多播组内的每个报文都可以接收到服务器发送的报文。多播数据在传输层封装为UDP报文,发送到224.0.0.0 ~ 239.255.255.255
范围内的D类IP地址和对应的以01-00-5E
开头的MAC地址。
实现多播路由的关键在于建立多播路由表。多播路由表的创建包括3种方式,即静态路由、PIM
和IGMP
代理。其中,IGMP(互联网组管理协议)是一个由主机和路由器之间使用的IPv4相邻网络建立多播,并维护多播组成员关系的通信协议。IGMP代理通过拦截路由器LAN侧主机发送的IGMP报文,代理LAN侧主机来发送IGMP报文和维护多播组成员关系,并加入上游多播组,即在WAN端口执行主机的角色,LAN端口执行路由器的角色。
OpenWrt通过自带的网络服务包igmpproxy
支持IGMP代理,并IGMP使用UCI配置接口(etc/config/igmpproxy
)作为管理接口,可以通过Linux命令ip mroute
查看多播路由。
配置方法如下所示:
1.在被测路由器终端上修改/etc/config/igmpproxy
中的upstream
端口监听地址范围(外网PC地址范围)并关闭loopback
端口监听:
```
config phyint
...
option direction upstream
list altnet 192.168.0.0/24
```
2.重启被测路由器,并在被测路由器终端上使用ps | grep igmp
确认存在igmpproxy
进程,如果没有则需要确认igmpproxy
文件配置是否正确;
3.在模拟内网PC上启动VLC media player,输入地址udp://@239.1.1.1:8028
,点击播放;
4.在模拟外网PC上启动PixStream WinSend,点击open
选择需要发送的的*.ts
格式的流媒体文件,,其他参数均为默认,点击发送。
注意:
配置流程参见docHOWTOIPTV/UDP multicast/ IPTV / UDP multicast;
-
/var/etc/igmpproxy.conf
由igmpproxy
根据/etc/config/igmpproxy
自动生成;如果igmpproxy
代理进程没有起来,需要确认内容是否如下所示,否则需要重启路由器:quickleave phyint eth1 upstream ratelimit 0 threshold 1 altnet 192.168.0.0/16 phyint br-lan downstream ratelimit 0 threshold 1
IGMP代理测试详细步骤参见IGMP Proxy测试。
3.3 防火墙
防火墙是指一种将内部网和公众访问网(如Internet)分开的方法,实际上是一种建立在现代通信网络技术和信息安全技术基础上的应用性安全技术和隔离技术。
OpenWrt基于Linux内核netfilter/iptable
框架封装了网络防火墙组件firewall3
,并进而通过LuCI配置界面提供web配置功能。
firewall3
在用户空间中运行,用以将配置文件解析为一组iptables规则,并将每个规则发送到内核netfilter
模块。OpenWRT使用firewall3
应用程序安全构建规则集,同时隐藏许多细节。
iptables
是内核netfilter
模块的用户空间代理,通过将报文过滤规则划分为负责过滤和防火墙功能的filter表、负责NAT(网络地址转化)功能的nat表、负责拆解/封装/重封装报文的mangel表以及关闭nat表上其中的连接追踪机制的raw表。
内核netfilter
模块在prerouting
、input
、forward
、output
和postrouting
等报文经过的5个阶段使用firewall3
创建的iptables
规则提供各种防火墙功能。
OpenWrt防火墙提供iptables命令、UCI配置接口(etc/config/firewall
)和Luci配置界面的防火墙页面等三种配置方式。
3.3.1 全状态包检测(SPI)
全状态包检测(SPI),是指通过对每个连接信息,包括源地址、目的地址、源端口、目的端口、协议类型、TCP协议连接状态和超时时间等进行检测从而判断是否丢弃数据包,并在默认情况下拒绝所有来自外网的请求,对通过防火墙的发自内网请求的连接动态地维护所有通信的状态(连接),只有对内网请求回复的连接并符合已建立的状态数据库的包才能通过防火墙进入内网;该功能由Linux网络协议栈默认提供。
3.3.2 防范常见拒绝服务(DoS)攻击
防范常见拒绝服务(DoS)攻击,包括PingofDeath
、TearDrop
、UDPflood
、SYNflood
、LandAttack
、IPSpoofingDoS
等;其中SYNflood
可以通过使能全局配置项synflood_protect
来进行防范,其余攻击形式由Linux网络协议栈默认提供保护,无需配置。
OpenWrt全局防火墙配置通过etc/config/firewall
来配置:
config defaults
...
option synflood_protect '1'
...
其中,可用配置项可以参考Documentation/User guide/Firewall documentation/Firewall configuration etc/config/firewall。
3.3.3 NAT(网络地址转换)
NAT是指将内部网络的私有IP地址转换为公有IP地址,包括SNAT(源地址转换)和DNAT(目的地址转换);该功能可以通过创建SNAT和DNAT端口转发规则来实现,参考Documentation/User guide/Firewall documentation/Firewall configuration etc/config/firewall。
config redirect
option name 'SNAT 192.168.1.100 to WAN 192.168.0.100 for tftp'
option src 'lan'
option src_ip '192.168.1.100'
option src_dip '192.168.0.100'
option dest 'wan'
option proto 'udp'
option target 'SNAT'
config redirect
option name 'DNAT WAN 69 port to LAN 192.168.1.100:69 for tftp'
option src 'wan'
option src_dport '69'
option dest 'lan'
option dest_ip '192.168.1.100'
option dest_port '69'
option proto 'udp'
option target 'DNAT'
DMZ(隔离区)和虚拟服务器(端口映射),是指将来自外网的所有请求或指向某个端口/协议的请求转发到指定的内网主机,从而实现对外服务器和虚拟服务器的功能;该功能可以通过创建DNAT端口转发规则,实现指定协议从指定源地址/源端口到目的地址/目的端口之间的转换,从而将指定内网主机的所有或部分端口/协议开放给外网用户访问。