OpenWRT防火墙工具fw3之NAT篇

NAT的原理

网卡收到数据包,首先进行的是DNAT检查,检查数据包的包头是否符合DNAT的规则,如果符合,将数据包的包头目的地址(包括端口,后文不在赘述)按规则替换。
替换完目的地址后,根据新的包头匹配路由表进行路由,确定数据包从哪个端口出去。
路由完成后再检查是否符合源地址替换规则(SNAT),如果符合源地址替换规则,则按照规则将数据包做SNAT,然后将新的数据包按照路由送出网卡。注意:上述描述的是数据包的目的地址不是本机,而是需要本机转发的报文。

Created with Raphaël 2.2.0网卡收包检查是否符合目的地址转换规则DNAT根据包目的地址进行路由检查是否符合源地址转换规则SNAT出网卡yesnoyesno

OpenWRT下的netfilter管理工具

Linux下的防火墙和NAT功能是通过netfilter内核模块实现的,iptables是一个用来与内核层的netfilter交互的用户层工具,但是iptables是一个命令行工具,为了方便从配置文件中获取过滤信息,OpenWRT开发了一套与iptables同地位的netfilter管理工具fw3,这个工具侧重于从uci格式的配置文件中获取过滤信息下发到内核的netfilter中去。

1. fw3配置文件

阅读本小节需要具备uci配置文件格式知识。
fw3的配置文件默认为/etc/config/firewall。

2. 数据包的目的地址转换(DNAT)

DNAT就是对数据包的目的地址进行转换,目的地址包含目的IP地址、目的端口。即从一个五元组变化为另一个五元组,生成一个新的数据包。五元组里面的5个数据任意组合可以作为过滤条件,即从所以数据包中筛选生效数据包的过滤条件。
(目的IP | 源IP | 目的端口 | 源端口 | 协议类型) --> (新目的IP | 源IP | 新目的端口 | 源端口 | 协议类型)

举个例子 1:
config redirectoption target          DNAToption src             wanoption dest            lanoption proto           tcpoption src_dport       2222option src_dip         192.168.8.20option src_ip          192.168.9.20option src_port        3333option dest_ip         192.168.10.20option dest_port       22option enabled         1

上述配置翻译成iptables命令如下:

iptables -t nat -A zone_wan_prerouting -p tcp -s 192.168.9.20/255.255.255.255 -d 192.168.8.20/255.255.255.255 -m tcp --sport 3333 --dport 2222 -m comment --comment "@redirect[0]" -j DNAT --to-destination 192.168.10.20:22

翻译成白话就是告诉内核:

如果遇到“源地址192.168.8.20,目的地址192.168.8.20,源端口3333,目的端口2222”的数据包,修改成“源地址192.168.168.8.20,目的地址192.168.10.20,源端口3333,目的端口22”的数据包。
option name 含义
target 本条规则的动作[DNAT|SNAT]
src 数据包的来源接口,对应zone节点的定义
dest 数据包的目的接口,对应zone节点的定义
proto 要过滤的数据包的协议, [tcp|udp|tcpudp]
src_dport 在做地址替换之前的数据包目的端口
src_ip 在做地址替换之前的数据包源IP地址
src_dip 在做地址替换之前的数据包目的IP地址
src_port 在做地址替换之前的数据包的源端口
dest_ip 地址替换之后的数据包目的IP地址
dest_port 地址替换之后的数据包目的端口地址
举个例子 2:
config redirectoption target          DNAToption src             wanoption dest            lanoption proto           tcpoption src_dport       2222option src_dip         192.168.8.20option dest_port       22option enabled         1

上述配置翻译成iptables命令如下:

iptables -t nat -A zone_wan_prerouting -p tcp -d 192.168.8.20/255.255.255.255 -m tcp --dport 2222 -m comment --comment "@redirect[0]" -j REDIRECT --to-ports 22

翻译成白话就是告诉内核:

如果遇到“目的地址192.168.8.20,目的端口2222,协议为tcp”的数据包,修改成“源地址保持,目的地址192.168.10.20,源端口保持,目的端口22,协议为tcp”的数据包。

对比例子1和例子2的区别: 例子2的对数据包的过滤范围要宽,只关心目的地址和目的端口。我们可以任意的放宽检测条件来对数据包进行过滤

注意:DNAT只做目的地址、目的端口的转换。

3. 数据包的源地址转换(SNAT)

举个例子 1
config redirectoption target          SNAToption src             wanoption dest            lanoption proto           tcpoption src_dport       2222option src_dip         192.168.8.20option src_ip          192.168.9.20option src_port        3333option dest_ip         192.168.10.20option dest_port       22option enabled         1

翻译成iptables命令:

iptables -t nat -A zone_lan_postrouting -p tcp -s 192.168.9.20/255.255.255.255 -d 192.168.10.20/255.255.255.255 -m tcp --sport 3333 --dport 22 -m comment --comment "@redirect[0]" -j SNAT --to-source 192.168.8.20:2222

翻译成白话:

当遇到“源地址192.168.9.20,目的地址192.168.10.20,源端口3333,目的端口22,协议为TCP”的数据包时,将其源地址和源端口修改为(192.168.8.20,2222)

(,192.168.9.20,22,3333,tcp) --> (,192.168.8.20,22,2222,tcp)

注意:在源地址转换里,option参数的意义与在目的地址转换里有些不同,区别如下:

option选项 在DNAT中的含义 在SNAT中的含义
src_dport 原数据包的目的端口 做源端口替换后的端口号
src_dip 原数据包的目的地址 做源地址替换后的目的地址
dest_ip 做目的地址替换后的目的地址 原数据包的目的地址
dest_port 做目的地址替换后的目的端口 原数据包的目的端口

OpenWRT NAT配置相关推荐

  1. ASA LAB-ASA NAT配置大全

    ASA LAB-ASA NAT配置大全 两种NAT配置方式 : 1- Auto(object)NAT 2- Twice NAT NAT分类 : Static nat Dynamic nat Stati ...

  2. LVS/NAT 配置

    LVS/NAT 配置 实验环境 三台主机:Linux Centos 6.4 32位 调度器Director:192.168.1.160(内网IP).192.168.2.20(公网IP) HTTP真实服 ...

  3. ROS教程(3)---静态NAT配置及应用 (

    ROS教程(3)---静态NAT配置及应用  ( 转载于:https://blog.51cto.com/80812345/983093

  4. 思科路由器动态NAT配置

    相关学习推荐: 优秀的网工都会NAThttps://blog.csdn.net/XMWS_IT/article/details/121508603?spm=1001.2014.3001.5502 微思 ...

  5. Cisco 双出口NAT配置

    Cisco 双出口NAT配置 目的:模拟拥有双出口链路情况下基于原地址策略路由功能,实现不同原内部地址从不同出口对外部网络的访问,由于多数实际情况下路由器在外部端口使用NAT对内网地址进行翻译,所以本 ...

  6. Openwrt上配置Aria2迅雷离线下载步骤

    Openwrt上配置Aria2迅雷离线下载步骤 1.首先,保证root目录下的空间充足,然后使用命令将所需的文件及依赖库放进去:(方法是:配置主机静态IP,如:192.168.1.66.然后打开tft ...

  7. 思科路由器NAT配置详解(转)

    思科路由器NAT配置详解(转) 网络技术 2010-07-11 17:48:14 阅读104 评论0   字号:大中小 订阅 思科路由器NAT配置详解 一.NAT简介: NAT(Network Add ...

  8. cisco路由器NAT配置

    要想对Cisco路由器的NAT进行配置,别的不说,最起码的,你要知道什么是NAT吧.其实NAT就是网络地址转换,是用于将一个地址域(如:专用Intranet)映射到另一个地址域的标准方法.它有作用及原 ...

  9. asterisk的NAT配置

    [转]asterisk的NAT配置 http://www.asteriskguru.com/tutorials/sip_nat_oneway_or_no_audio_asterisk.html 这篇文 ...

最新文章

  1. CVPR 2021 | 视觉目标检测大模型GAIA:面向行业的视觉物体检测一站式解决方案
  2. android clipChildren的使用
  3. GraphQL支持层级结构的query
  4. Linux 命令之 rpm -- RPM 软件包的管理工具
  5. docker volume源码分析
  6. c语言 统计数量用count_C语言编程中统计输入的行数以及单词个数的方法
  7. 数据库系统概论-绪论
  8. CAD二次开发 C# .net dwg批量转dxf
  9. 安卓4.X的桌面启动器-尖端启动器APEX
  10. Qt调节电脑屏幕亮度
  11. 计算机英语中bar是什么意思啊,bar是什么意思
  12. 基于openstack的云桌面开源框架
  13. Teams登录报错最全的解决方法ERROR CAA20002 caa70004
  14. 基于视频分析的rPPG心率检测
  15. 我的爱好作文玩计算机800,我的爱好作文800字
  16. 如何动态创建水晶报表
  17. Double S 曲线轨迹规划——不同速度加速度条件下综合
  18. 使用Spring Boot构建微服务(文末福利)
  19. java常用代码架构示例
  20. 消防管件做的机器人图片_消防管道配件制成机器人

热门文章

  1. [原创]企业主眼中的微博商业化-微博粉丝通广告试用手记
  2. date转换datetime
  3. html 文本框输入,HTML文本框INPUT无法输入的解决
  4. 苹果开发者 邓白氏号码 免费申请
  5. 广州图书馆周六日攻略
  6. 手机探测安检门的选择方法
  7. php 微信公众平台开发之微信群发信息
  8. Linux(Ubuntu)安装和使用Edge浏览器
  9. 使用AWS Amplify可视化构建部署Vue应用程序
  10. OA项目之待开会议历史会议所有会议