当前位置: 首页 > article >正文

【openwrt-21.02】Openwrt NAT配置举例

Openwrt NAT配置举例

DNAT

Port forwarding for IPv4 (DNAT)

        此规则的目标是将端口 2222 上的所有 WAN 端 SSH 访问重定向到 单个 LAN 端工作站的 SSH (22) 端口。

config redirect
       option target          DNAT
       option src             wan
       option dest            lan
       option proto           tcp
       option src_dport       2222
       option dest_ip         192.168.10.20
       option dest_port       22
       option enabled         1
规则测试

        要从 WAN 端工作站 (STA1) 进行测试,请在端口 2222 上通过 SSH 连接到 LAN 端网络上不存在的 IPv4 地址:

ssh -p 2222 192.168.10.13 hostname; cat /proc/version

启用该规则后,STA2 将回复其主机名和内核版本。 禁用规则后,连接将被拒绝。

添加规则如下

iptables -t nat -A zone_wan_prerouting -p tcp -m tcp --dport 2222 -m comment --comment "!fw3: @redirect[0]" -j DNAT --to-destination 192.168.10.20:22
...
iptables -t nat -A zone_lan_prerouting -p tcp -s 192.168.10.0/255.255.255.0 -d 192.168.3.185/255.255.255.255 -m tcp --dport 2222 -m comment --comment "!fw3: @redirect[0] (reflection)" -j DNAT --to-destination 192.168.10.20:22

        第一条规则匹配在 TCP 端口 2222 上进入 WAN 端的数据包,并跳转到过滤器以将目标转换为 . 第二条规则匹配从 LAN 端传入 WAN 端的数据包(如果在 TCP 端口 2222 上)。 DNAT 目标使用与第一条规则相同的参数在 conntrack 表中查找“反射”。DNAT192.168.10.20:22--to-destination

连接跟踪表记录
ipv4     2 tcp      6 117 TIME_WAIT src=192.168.3.171 dst=192.168.10.13 sport=51390 dport=2222 packets=21 bytes=4837 src=192.168.10.20 dst=192.168.3.171 sport=22 dport=51390 packets=23 bytes=4063 [ASSURED] mark=0 use=2

此记录显示 WAN 端 src=STA1 和 dst=192.168.10.13:2222 以及反向 LAN 端 src=STA2:22 src=STA1。

DNAT to translate a LAN-side address on the WAN-side

       此重定向规则将导致路由器将 WAN 端源 1.2.3.4 转换为 LAN 端 STA2,并将 ICMP 回显路由到该 STA2。 该规则是自反的,因为 STA2 将在 WAN 端转换为 1.2.3.4。

config redirect
        option src      wan
        option src_dip  1.2.3.4
        option proto    icmp
        option dest     lan
        option dest_ip  192.168.10.20
        option target   DNAT
	    option name     DNAT-ICMP-WAN-LAN
	    option enabled  1

LAN-side public server

        所有重定向都需要某种形式的 NAT 和连接跟踪。为 防火墙后面的公共服务器,则 DNAT 目标用于转换 WAN 端的公网 IP 地址到 LAN 端服务器的私有地址。

config redirect
        option target DNAT
        option src wan
        option src_dport 25
        option proto tcp
        option family ipv4
        option dest lan
        option dest_ip 192.168.10.20
        option dest_port 2525
        option name DNAT-MAIL-SERVER
        option enabled 1

          在此示例中,STA2 正在运行一个电子邮件服务器(例如 postfix),该服务器在端口 2525 上侦听传入电子邮件。

         此重定向规则规定:来自端口 25 上的 WAN 的任何传入流量,重定向到 STA1 端口 2525。要验证 dump 上的内容,请观察传入流量的动态连接。 其中可能有相当多的 conntrack 记录,因此我们只搜索使用端口 2525 的记录:

...
ipv4     2 tcp      6 7436 ESTABLISHED src=192.168.3.171 dst=192.168.3.11 sport=41370 dport=25 packets=4 bytes=229 src=192.168.10.20 dst=192.168.3.171 sport=2525 dport=41370 packets=3 bytes=164 [ASSURED] mark=0 use=2
...

        连接从 STA1 端口 25 到 DUT,并转换为 STA2 在端口 2525 上,响应目标为 STA1。相关流量与 OpenWrt 防火墙允许遍历区域的 DNAT conntrack 状态匹配,因此不需要额外的宽松规则。

Source NAT (SNAT)

        此规则的目标是将源 IP 地址从真实 station 转换为 端口 8080 上的虚构版本。

config redirect
        option target           SNAT
        option src              lan
        option dest             wan
	    option proto            tcp
        option src_ip           192.168.10.20
        option src_dip          192.168.10.13
        option dest_port        8080
	    option enabled          1

要测试:

  1. 使用 netcat 侦听 STA1,即 WAN 端站:nc -l 8080

  2. 使用 Netcat 在 STA2 上进行连接,即 LAN 端工作站:nc -v 192.168.3.171 8080

        在 LAN 端工作站上键入内容,并在 WAN 端工作站上看到它的回声。 使用 WAN 侧工作站检查连接并查看线路:netstat -ntap

tcp        0      0 192.168.3.171:8080      192.168.10.13:47970 ESTABLISHED 16746/nc

WAN 端工作站在端口 8080 上显示连接到它的 SNAT 地址!

        单独使用时,源 NAT 用于限制计算机对 Internet 的访问,同时允许它通过转发看似 一些本地服务,例如 NTP,连接到 Internet。 DNAT 对 Internet 隐藏本地网络,而 SNAT 对本地网络隐藏 Internet。

MASQUERADE

         这是最常用和最有用的 NAT 函数。 它将 LAN 端的本地专用网络转换为 WAN 端的单个公共地址/端口数,然后反之。 它是每个 IPv4 路由器的默认防火墙配置。 因此,这是一个非常简单的 fw4 配置。LAN 端使用专用网络。 路由器将私有地址转换为路由器 address:port,netfilter conntrack 模块管理连接。伪装会设置在 WAN 端

config zone
	option name 'wan'
	list network 'wan'
	....
	option masq '1'

       路由器通常会从上游 DHCP 服务器获取其 WAN IP 地址,并成为 LAN 站的 DHCP 服务器(通常是 DNS 服务器)。网络配置文件定义私有网络,dhcp 配置文件定义 OpenWrt 路由器如何分配 LAN 端 IPv4 地址。

        启用 MASQUERADE 后,WAN 和 LAN 之间的所有转发流量都会被转换。从本质上讲,MASQUERADE 防火墙规则几乎不会出错。

        cat /proc/net/nf_conntrack 检查当前的 MASQUERADE 连接。以下连接跟踪从 STA1 到 STA2 的 SSH (22) 访问。

ipv4     2 tcp      6 4615 ESTABLISHED src=192.168.3.171 dst=192.168.10.20 sport=60446 dport=22 packets=27 bytes=1812 src=192.168.10.20 dst=192.168.3.171 sport=22 dport=60446 packets=21 bytes=2544 [ASSURED] mark=0 use=2

Transparent proxy rule (external)

        以下规则通过侦听端口 3128 的 192.168.1.100 上的外部代理重定向所有 LAN 端 HTTP 流量。 它假定 lan 地址为 192.168.1.1 - 这是伪装向代理的重定向流量所必需的。

config redirect
        option src              lan
        option proto            tcp
        option src_ip           !192.168.1.100
        option src_dport        80
        option dest_ip          192.168.1.100
        option dest_port        3128
        option target           DNAT
 
config redirect
        option dest             lan
        option proto            tcp
        option src_dip          192.168.1.1
        option dest_ip          192.168.1.100
        option dest_port        3128
        option target           SNAT

NAT

在 WAN 区域上启用伪装又名 NAT。

uci set firewall.@zone[1].masq="1"
uci commit firewall
service firewall restart

IPv6 NAT

在 WAN 区域启用 IPv6 伪装,又名 NAT66

uci set firewall.@zone[1].masq6="1"
uci commit firewall
service firewall restart

通告ULA 前缀的 IPv6 默认路由。

uci set dhcp.lan.ra_default="1"
uci commit dhcp
service odhcpd restart

在上游接口上禁用 IPv6 源过滤器。

uci set network.wan6.sourcefilter="0"
uci commit network
service network restart

Selective NAT

为特定源子网有选择地启用伪装。

uci -q delete firewall.nat
uci set firewall.nat="nat"
uci set firewall.nat.family="ipv4"
uci set firewall.nat.proto="all"
uci set firewall.nat.src="wan"
uci set firewall.nat.src_ip="192.168.2.0/24"
uci set firewall.nat.target="MASQUERADE"
uci commit firewall
service firewall restart

IPv6 selective NAT

有选择地为特定源子网启用 IPv6 伪装。

uci -q delete firewall.nat6
uci set firewall.nat6="nat"
uci set firewall.nat6.family="ipv6"
uci set firewall.nat6.proto="all"
uci set firewall.nat6.src="wan"
uci set firewall.nat6.src_ip="fd00:2::/64"
uci set firewall.nat6.target="MASQUERADE"
uci commit firewall
service firewall restart

IPv6 to IPv4 NAT with Jool

使用 Jool 为仅 IPv6 网络启用 IPv6 到 IPv4 NAT,又名 NAT64。 使用 DNS64 解析域名。

opkg update
opkg install jool-tools-netfilter
. /usr/share/libubox/jshn.sh
json_init
json_add_string "instance" "default"
json_add_string "framework" "netfilter"
json_add_object "global"
json_add_string "pool6" "64:ff9b::/96"
json_close_object
json_dump > /etc/jool/jool-nat64.conf.json
uci set jool.general.enabled="1"
uci set jool.nat64.enabled="1"
uci commit jool
service jool restart

IPv6 to IPv4 NAT with Tayga

使用 Tayga 为仅 IPv6 网络启用 IPv6 到 IPv4 NAT,又名 NAT64。 使用 DNS64 解析域名。

opkg update
opkg install tayga
uci del_list firewall.lan.network="nat64"
uci add_list firewall.lan.network="nat64"
uci commit firewall
service firewall restart
uci -q delete network.nat64
uci set network.nat64="interface"
uci set network.nat64.proto="tayga"
uci set network.nat64.prefix="64:ff9b::/96"
uci set network.nat64.ipv6_addr="fd00:ffff::1"
uci set network.nat64.dynamic_pool="192.168.255.0/24"
uci set network.nat64.ipv4_addr="192.168.255.1"
uci commit network
service network restart

TTL

修改出口流量的 TTL。

cat << "EOF" > /etc/nftables.d/ttl.sh
WAN_TTL="65"
. /lib/functions/network.sh
network_flush_cache
network_find_wan WAN_IF
network_get_device WAN_DEV "${WAN_IF}"
nft add rule inet fw4 mangle_postrouting \
oifname "${WAN_DEV}" ip ttl set "${WAN_TTL}"
EOF
uci -q delete firewall.ttl
uci set firewall.ttl="include"
uci set firewall.ttl.path="/etc/nftables.d/ttl.sh"
uci commit firewall
service firewall restart

IPv6 hop limit

修改出口流量的 IPv6 跃点限制。

cat << "EOF" > /etc/nftables.d/hlim.sh
WAN_HLIM="65"
. /lib/functions/network.sh
network_flush_cache
network_find_wan6 WAN_IF
network_get_device WAN_DEV "${WAN_IF}"
nft add rule inet fw4 mangle_postrouting \
oifname "${WAN_DEV}" ip6 hoplimit set "${WAN_HLIM}"
EOF
uci -q delete firewall.hlim
uci set firewall.hlim="include"
uci set firewall.hlim.path="/etc/nftables.d/hlim.sh"
uci commit firewall
service firewall restart

参考链接

[OpenWrt Wiki] NAT examplesicon-default.png?t=O83Ahttps://openwrt.org/docs/guide-user/firewall/fw3_configurations/fw3_nat#npt


http://www.kler.cn/news/355420.html

相关文章:

  • 使用Git进行版本控制
  • 如何利用RFID技术提升应急物资管理效率?
  • Reactor 与 Proactor 模式概述
  • 动态规划一>下降路径最小和
  • TDengine 与北微传感达成合作,解决传统数据库性能瓶颈
  • JVM进阶调优系列(4)年轻代和老年代采用什么GC算法回收?
  • Dubbo 序列化方式
  • 19.面试算法-树的深度优先遍(一)
  • 飞机大战告尾
  • springboot第76集:线程,ThreadGroup
  • AttributeError: module ‘lib‘ has no attribute ‘OpenSSL_add_all_algorithms‘
  • 第一百零七周周报
  • Arm官网
  • 安卓冻屏bug案例作业分享-千里马学员wms+input实战作业
  • 浙江省普通话水平测试教程PDF教材电子版(修订版)
  • Android OpenGL天空盒
  • tracert和ping的区别
  • R语言机器学习算法实战系列(八)逻辑回归算法 (logistic regression)
  • 安装和简单使用Milvus
  • protues仿真STM32时,配置管脚为上拉输入时,检测不准确