/ip/firewall/nat
nat
/ip/firewall/nat 的 RouterOS 目录参考。
ip/firewall/nat
Type: Directory
| 参数 | 类型 | 描述 |
|---|---|---|
all | switch | |
static | switch | |
dynamic | switch | |
chain * | enum | 指定规则将添加到哪个链。如果输入与已定义链的名称不匹配,则会创建新链。 |
action | enum (accept | jump | return | log | passthrough | add-src-to-address-list | add-dst-to-address-list | src-nat | masquerade | dst-nat | redirect | same | netmap | endpoint-independent-nat | socksify) { accept:0, jump:1, return:2, log:3, passthrough:4, add-src-to-address-list:5, add-dst-to-address-list:6, src-nat:20, masquerade:21, dst-nat:22, redirect:23, same:24, netmap:25, endpoint-independent-nat:26, socksify:27 } | 当数据包匹配规则时要执行的操作: - accept - 接受数据包。数据包不会传递给下一条防火墙规则。 - add-dst-to-address-list - 将目标地址添加到由 address-list 参数指定的地址列表。 - add-src-to-address-list - 将源地址添加到由 address-list 参数指定的地址列表。 - jump - 跳转到由 jump-target 参数值指定的用户自定义链。 - log - 向系统日志添加一条包含以下数据的消息:in-interface、out-interface、src-mac、protocol、src-ip:port->dst-ip:port 以及数据包长度。数据包匹配后,会像 passthrough 一样传递给列表中的下一条规则。 - passthrough - 如果数据包匹配规则,则增加计数器并转到下一条规则(用于统计)。 - return - 将控制权返回到发生跳转的链。 - src-nat - 用 to-addresses 和 to-ports 参数指定的值替换 IP 数据包的源地址。 - masquerade - 用 to-ports 参数指定的端口替换 IP 数据包的源端口,并用路由功能确定的 IP 替换 IP 数据包的源地址。 - dst-nat - 用 to-addresses 和 to-ports 参数指定的值替换 IP 数据包的目标地址和/或端口。 - redirect - 用 to-ports 参数指定的端口替换 IP 数据包的目标端口,并将目标地址替换为虚拟或物理入接口(接收数据包的接口)的地址。 - same - 为每个连接从提供的范围中为特定客户端分配相同的源/目标 IP 地址。这最常用于需要同一客户端在多个连接中使用相同客户端地址的服务。 - netmap - 创建一组 IP 地址到另一组 IP 地址的静态 1:1 映射。常用于将公共 IP 地址分配给专用网络中的主机。 - endpoint-independent-nat - 使用端点无关的映射和过滤。仅适用于 UDP 协议。 - socksify - 将通过防火墙规则指定的流量路由到 SOCKS 代理服务器。需要 socks5-server 和 socks5-port 参数或 socksify-service 参数。socksify 相关信息 |
jump-target | enum () | 要跳转到的目标链名称。仅在 action=jump 时适用。 |
to-addresses | super { min: ipRange } | 用指定的地址替换原始地址。适用于操作类型为 dst-nat、netmap、same、src-nat 的情况。 |
to-ports | super { min: num [0 .. 65535] , [max] -num [0 .. 65535] } | 用指定的端口替换原始端口。适用于操作类型为 dst-nat、redirect、masquerade、netmap、same、src-nat 的情况。 |
same-not-by-dst | bool | 指定在选择新的源 IP 地址时是否考虑目标 IP 地址。适用于 action=same。 |
randomise-ports | bool | 随机化端口转换。 |
socksify-service | enum | SOCKS 服务名称。 |
socks5-server | ipAddr | SOCKS5 服务器的 IP 地址。 |
socks5-port | num | SOCKS5 服务器的端口。 |
connection-limit | super { ! , limit: num , [netmask] ,num } | 在达到给定值后按地址或地址块匹配连接。应将其与 connection-state=new 和/或 tcp-flags=syn 配合使用,因为该匹配器非常消耗资源。 |
layer7-protocol | super { ! , protocol: enum } | 在 layer7 protocol 菜单中定义的 Layer7 过滤器名称。 |
realm | super { ! , realm: num } | 匹配路由域。仅适用于 IPv4。 |
protocol | super { ! , protocol: enum () } | 匹配由协议名称或编号指定的特定 IP 协议。 |
src-address | super { ! , range: ipRange } | 匹配源地址等于指定 IP 或落在指定 IP 范围内的数据包。 |
dst-address | super { ! , range: ipRange } | 匹配目的地址等于指定 IP 或落在指定 IP 范围内的数据包。 |
fragment | super { fragment: bool } | 匹配分片数据包。第一个(起始)分片不计入。如果启用了连接跟踪,系统会自动重组每个数据包,因此不会出现分片。仅适用于 IPv4。 |
psd | super { weight-threshold: num , [delay-threshold] ,time , [low-port-weight] ,num , [high-port-weight] ,num } | 尝试检测 TCP 和 UDP 扫描。参数采用以下格式:WeightThreshold, DelayThreshold, LowPortWeight, HighPortWeight。 - WeightThreshold - 来自同一主机、目的端口不同的最新 TCP/UDP 数据包总权重,达到该值即被视为端口扫描序列。 - DelayThreshold - 来自同一主机、目的端口不同的数据包被视为可能端口扫描子序列的延迟。 - LowPortWeight - 目的端口为特权端口(<1024)的数据包权重。 - HighPortWeight - 目的端口为非特权端口的数据包权重。仅适用于 IPv4。 |
ipv4-options | super { options: enum (strict-source-routing | loose-source-routing | no-source-routing | record-route | no-record-route | timestamp | no-timestamp | router-alert | no-router-alert | any | none) { strict-source-routing:0x1, loose-source-routing:0x2, no-source-routing:0x4, record-route:0x8, no-record-route:0x10, timestamp:0x20, no-timestamp:0x40, router-alert:0x80, no-router-alert:0x100, any:0x200, none:0x400 } } | 匹配 IPv4 头选项。 - any - 匹配至少包含一个 IPv4 选项的数据包。 - loose-source-routing - 匹配带有宽松源路由选项的数据包。 - no-record-route - 匹配不带记录路由选项的数据包。 - no-router-alert - 匹配不带路由器警告选项的数据包。 - no-source-routing - 匹配不带源路由选项的数据包。 - no-timestamp - 匹配不带时间戳选项的数据包。 - record-route - 匹配带有记录路由选项的数据包。 - router-alert - 匹配带有路由器警告选项的数据包。 - strict-source-routing - 匹配带有严格源路由选项的数据包。 - timestamp - 匹配带有时间戳的数据包。仅适用于 IPv4。 |
src-address-type | super { ! , type: ubit (unicast, local, broadcast, multicast, blackhole) } | 匹配源地址类型: - unicast - 用于点对点传输的 IP 地址。 - local - 该地址分配给路由器的某个接口。 - broadcast - 数据包发送到子网中的所有设备。 - multicast - 数据包转发到定义的设备组。 |
dst-address-type | super { ! , type: ubit (unicast, local, broadcast, multicast, blackhole) } | 匹配目的地址类型: - unicast - 用于点对点传输的 IP 地址。 - local - 目的地址分配给路由器的某个接口。 - broadcast - 数据包发送到子网中的所有设备。 - multicast - 数据包转发到定义的设备组。 |
src-address-list | super { ! , address-list: enum } | 将数据包的源地址与用户定义的地址列表进行匹配。仅支持一个列表。 |
dst-address-list | super { ! , address-list: enum } | 将数据包的目的地址与用户定义的地址列表进行匹配。仅支持一个列表。 |
hotspot | multi { array-id, array-id, flag: super { ! , flag: enum (from-client | auth | local-dst | to-client | http) { from-client:0, auth:1, local-dst:2, to-client:3, http:4 } } } | 将来自 HotSpot 客户端的数据包与各种 HotSpot 匹配器进行匹配。 - auth - 匹配已认证的 HotSpot 客户端数据包。 - from-client - 匹配来自 HotSpot 客户端的数据包。 - http - 匹配发送到 HotSpot 服务器的 HTTP 请求。 - local-dst - 匹配发往 HotSpot 服务器的数据包。 - to-client - 匹配发送到 HotSpot 客户端的数据包。仅适用于 IPv4。 |
address-list | enum () | 要使用的地址列表名称。适用于动作为 add-dst-to-address-list 或 add-src-to-address-list 的情况。 |
address-list-timeout | alt { address-list-timeout: enum (none-dynamic | none-static) { none-dynamic:0, none-static:0xffffffff } , address-list-timeout: time [ .. 21474836] } | 地址通过 add-src-to-address-list 或 add-dst-to-address-list 动作添加到 address-list 后,在列表中保留的时长。指定时间后,规则会添加一个动态条目(D),路由器在时间结束时将其移除;每次规则再次匹配都会将时间重置为完整值。最大值为 35w3d13h13m56s。如果地址已经是列表中的静态条目,则保持静态。 - none-dynamic (0s) - 添加不带超时的动态条目。它不会保存在配置中,重启后会清除。 - none-static - 添加静态条目。它会保存在配置和导出中,并在重启后保留,直到你将其移除。 |
ttl | super { mode: enum (equal | not-equal | less-than | greater-than) { equal:0, not-equal:1, less-than:2, greater-than:3 } , [value] :num [0 .. 255] } | 匹配数据包的 TTL 值。仅适用于 IPv4。 |
connection-mark | super { ! , mark: enum } | 匹配由 mangle 功能标记了特定连接标记的数据包。如果设置了 no-mark,规则将匹配任何未标记的连接。 |
connection-type | super { ! , type: enum (ftp | pptp | h323 | sip | irc | quake3 | tftp) { ftp:0, pptp:1, h323:2, sip:3, irc:4, quake3:5, tftp:6 } } | 根据连接跟踪助手的信息匹配来自相关连接的数据包。必须在 /ip/firewall/service-port 下启用相关的连接助手。 |
connection-bytes | super { from: num , [to] -num } | 仅当通过特定连接传输了给定字节数时才匹配数据包。0 表示不限,例如 connection-bytes=2000000-0 表示当相关连接传输超过 2MB 时规则匹配。 |
connection-rate | super { ! , from: num , [to] -num } | 允许根据连接的当前速度捕获流量。 |
routing-mark | super { ! , mark: enum () } | 匹配由 mangle 功能标记了特定路由标记的数据包。 |
in-interface | super { ! , interface: iface_enum } | 数据包进入路由器时所经过的接口。 |
out-interface | super { ! , interface: iface_enum } | 数据包离开路由器时所经过的接口。 |
in-interface-list | super { ! , interface-list: enum } | 在接口列表中定义的接口集合。作用与 in-interface 相同。 |
out-interface-list | super { ! , interface-list: enum } | 在接口列表中定义的接口集合。作用与 out-interface 相同。 |
in-bridge-port | super { ! , interface: iface_enum } | 当入接口为网桥时,数据包进入路由器实际经过的接口。仅在网桥设置中启用 use-ip-firewall 时有效。 |
out-bridge-port | super { ! , interface: iface_enum } | 当出接口为网桥时,数据包离开路由器实际经过的接口。仅在网桥设置中启用 use-ip-firewall 时有效。 |
in-bridge-port-list | super { ! , interface-list: enum } | 在接口列表中定义的接口集合。作用与 in-bridge-port 相同。 |
out-bridge-port-list | super { ! , interface-list: enum } | 在接口列表中定义的接口集合。作用与 out-bridge-port 相同。 |
packet-mark | super { ! , mark: enum } | 匹配由 mangle 功能标记了特定数据包标记的数据包。如果设置了 no-mark,规则将匹配任何未标记的数据包。 |
src-port | super { ! , port: multi { range: range [ .. 65535] } } | 源端口及源端口范围列表。仅当协议为 TCP 或 UDP 时适用。 |
dst-port | super { ! , port: multi { range: range [ .. 65535] } } | 目的端口号或端口号范围列表。 |
port | super { ! , port: multi { range: range [ .. 65535] } } | 当任一端口(源端口或目的端口)与指定的端口或端口范围列表匹配时匹配。仅当 protocol 为 TCP 或 UDP 时适用。 |
icmp-options | super { ! , type: num [0 .. 255] , [code] [ :range [ .. 255]] } | 匹配 ICMP 的 type:code 字段。 |
src-mac-address | super { ! , address: macAddr } | 匹配数据包的源 MAC 地址。 |
content | super { ! , content: string } | 匹配包含指定文本的数据包。 |
ingress-priority | super { ! , ingress-priority: num [0 .. 63] } | 匹配入站数据包的优先级。优先级可能来自 VLAN、WMM、DSCP 或 MPLS EXP 位。 |
priority | super { ! , priority: num [0 .. 63] } | 匹配设置新优先级后的数据包优先级。优先级可能来自 VLAN、WMM、DSCP、MPLS EXP 位,或来自通过 set-priority 动作设置的优先级。 |
dscp | super { ! , dscp: num [0 .. 63] } | 匹配 DSCP IP 头字段。 |
tos | super { ! , tos: num [0 .. 255] , [mask] [ /num [0 .. 255]] } | |
limit | super { ! , count: num [1 .. 32000000000] , [time] [ /time [1 .. ]] , [burst] ,num [ .. 2000000000] , [mode] [ :enum (packet | bit) { packet:0, bit:1 }] } | 匹配数据包,直到达到有限速率(数据包速率或比特速率)。带有此匹配器的规则会一直匹配,直到达到该限制。参数采用以下格式:rate[/time],burst:mode。 - rate - 每个时间间隔要匹配的数据包数或比特数。 - time - 指定数据包或比特速率不能超过的时间间隔(可选,未指定时使用 1s)。 - burst - 要匹配的初始数据包数或比特数:该数字每 10ms 重新增加,因此 burst 至少应为每秒速率值的 1/100。 - mode - 数据包或比特模式。 |
dst-limit | super { count: num , [time] [ /time] , [burst] ,num , [mode] ,enum (dst-address | dst-address-and-port | src-address | src-and-dst-addresses | addresses-and-dst-port) { dst-address:1, dst-address-and-port:3, src-address:4, src-and-dst-addresses:5, addresses-and-dst-port:7 } , [expire] [ /time] } | 匹配数据包,直到超过给定速率。速率定义为每个时间间隔的数据包数。与 limit 匹配器不同,每个流都有自己的限制。流由 mode 参数定义。参数采用以下格式:rate[/time],burst,mode[/expire]。 - rate - 每个流每个时间间隔要匹配的数据包数。 - time - 指定每个流的数据包计数速率不能超过的时间间隔(可选,未指定时使用 1s)。 - burst - 每个流要匹配的初始数据包数:每经过一个 time/rate,该数字会重新增加一,直到达到此数量。 - mode - 指定哪些唯一字段定义流(src-address、dst-address、src-and-dst-address、dst-address-and-port、addresses-and-dst-port)。 - expire - 指定无数据包的流在多长时间后允许删除(可选)。 |
time | super { ! , start: time [0 .. 86400] , [end] -time [0 .. 86400] , [day] ,ubit (sun, mon, tue, wed, thu, fri, sat) } | 根据数据包的到达时间和日期创建过滤器;对于本地生成的数据包,则使用离开时间和日期。该匹配器会考虑路由器上配置的时间和时区。 |
random | super { percent: num [1 .. 99] } | 以给定概率随机匹配数据包。 |
nth | super { ! , every: num [1 .. ] , [packet] [ ,num [1 .. ]] } | 每隔第 n 个数据包进行匹配:nth=2,1 将匹配每 2 个数据包中的第 1 个,即匹配该规则命中的所有流量中的 50%。 |
tcp-mss | super { ! , min: num [0 .. 65535] , [max] -num [0 .. 65535] } | 匹配 IP 数据包的 TCP MSS 值。 |
per-connection-classifier | super { ! , values-to-hash: enum (src-address | dst-address | both-addresses | src-port | src-address-and-port | dst-port | dst-address-and-port | both-ports | both-addresses-and-ports) { src-address:1, dst-address:2, both-addresses:3, src-port:4, src-address-and-port:5, dst-port:8, dst-address-and-port:10, both-ports:12, both-addresses-and-ports:15 } , [denominator] :num [1 .. ] , [remainder] /num [0 .. ] } | PCC 匹配器允许将流量划分为相等的流,并能够将具有特定选项集合的数据包保留在同一个流中。 |
packet-size | super { ! , min: num [ .. 65535] , [max] -num [ .. 65535] } | 按字节匹配指定大小或大小范围的数据包。 |
log | bool | 向系统日志添加一条消息,包含以下数据:in-interface、out-interface、src-mac、protocol、src-ip:port->dst-ip:port 以及数据包长度。即使动作不是 log 也允许记录数据包,便于防火墙调试。 |
log-prefix | string | 在每条日志消息开头添加指定文本。适用于配置了 action=log 或 log=yes 的情况。 |
ipsec-policy | super { direction: enum (in | out) { in:0, out:1 } , [policy] ,enum (none | ipsec) { none:0, ipsec:1 } } | 匹配 IPsec 使用的策略。值的格式为:direction, policy。 - in - 在 PREROUTING、INPUT 和 FORWARD 链中有效。 - out - 在 POSTROUTING、OUTPUT 和 FORWARD 链中有效。 - ipsec - 如果数据包需要经过 IPsec 处理则匹配。 - none - 匹配不经过 IPsec 处理的数据包。 |