【openwrt-21.02】Openwrt NAT配置举例

news/2024/10/21 5:21:51/

Openwrt NAT配置举例

DNAT

Port forwarding for IPv4 (DNAT)

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

config redirectoption target          DNAToption src             wanoption dest            lanoption proto           tcpoption src_dport       2222option dest_ip         192.168.10.20option dest_port       22option 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 redirectoption src      wanoption src_dip  1.2.3.4option proto    icmpoption dest     lanoption dest_ip  192.168.10.20option target   DNAToption name     DNAT-ICMP-WAN-LANoption enabled  1

LAN-side public server

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

config redirectoption target DNAToption src wanoption src_dport 25option proto tcpoption family ipv4option dest lanoption dest_ip 192.168.10.20option dest_port 2525option name DNAT-MAIL-SERVERoption 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 redirectoption target           SNAToption src              lanoption dest             wanoption proto            tcpoption src_ip           192.168.10.20option src_dip          192.168.10.13option dest_port        8080option 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 zoneoption 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 redirectoption src              lanoption proto            tcpoption src_ip           !192.168.1.100option src_dport        80option dest_ip          192.168.1.100option dest_port        3128option target           DNATconfig redirectoption dest             lanoption proto            tcpoption src_dip          192.168.1.1option dest_ip          192.168.1.100option dest_port        3128option 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.ppmy.cn/news/1540704.html

相关文章

云计算-----单机LNMP结构WordPress网站

LNMP结构 博客网站 day1 小伙伴们&#xff0c;LNMP结构在第一二阶段浅浅的学习过&#xff0c;这里我们可以离线部署该结构。L指&#xff08;虚拟机&#xff09;服务器&#xff0c;nginx&#xff08;前端代理服务器&#xff09;mysql数据库&#xff0c;最后基于php建设动态…

如何利用动态IP进行数据采集?

在数据驱动的时代&#xff0c;动态IP成为进行高效数据采集的利器。动态IP可以通过频繁更换IP地址避免因频繁访问而受限&#xff0c;从而实现更顺畅的数据获取。本文将详细探讨如何利用动态IP进行数据采集&#xff0c;为企业提升信息获取能力提供实用指导。 如何利用动态IP进行…

前言——25机械考研复试专业面试问题汇总 机械复试超全流程攻略 机械复试看这一个专栏就够用了!机械复试调剂英语自我介绍口语专业面试常见问题总结 机械保研面试

一、开篇寄语&#xff1a; 在准备考研复试的关键时期&#xff0c;许多学弟学妹们往往会寻求各种资料来辅助复习&#xff0c;市面上也因此涌现了大量的“考研复试全流程全攻略”。然而&#xff0c;这些攻略往往存在以下问题&#xff1a; 1、内容不完整性 遗漏关键信息&#x…

OpenCV高级图形用户界面(14)交互式地选择一个或多个感兴趣区域函数selectROIs()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 允许用户在给定的图像上选择多个 ROI。 该函数创建一个窗口&#xff0c;并允许用户使用鼠标来选择多个 ROI。控制方式&#xff1a;使用空格键或…

论文阅读-U3M(2)

HOW MUCH POSITION INFORMATION DO CONVOLUTIONAL NEURAL NETWORKS ENCODE? 文章目录 HOW MUCH POSITION INFORMATION DO CONVOLUTIONAL NEURAL NETWORKS ENCODE?前言一、位置编码网络&#xff08;PosENet&#xff09;二、训练数据三、实验3.1 位置信息的存在性3.2 分析PosEN…

【LeetCode每日一题】——523.连续的子数组和

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 前缀和 二【题目难度】 中等 三【题目编号】 523.连续的子数组和 四【题目描述】 给你一个…

第2节 如何学习鸿蒙技术

以下是学习鸿蒙技术的一些途径&#xff1a; 一、官方文档与资源 1. 华为开发者官网 • 这是最权威的学习资源平台。官网提供了详细的鸿蒙操作系统的文档&#xff0c;包括架构介绍、开发指南、API参考等内容。例如&#xff0c;对于初学者来说&#xff0c;可以从入门教程开始&am…

015集——c# 实现CAD excel交互(CAD—C#二次开发入门)

第一步&#xff1a;添加引用 程序集—>扩展 namespace WindowsFormsApp2 {public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){}private void 获取当前excel_Click(object sender, EventArgs e…