要实现这一点,您需要使用 "Internal NAT Hairpin"。您可以通过几个命令来配置它。
假设 1.1.1.1 是我们的外部IP地址,192.168.1.0/24 是我们的本地网络,而 192.168.1.128 是一个Web服务器。
然后,您需要添加以下NAT规则:
/ip firewall nat
# Forwarding
chain=dstnat action=dst-nat to-addresses=1.1.1.1 dst-address=1.1.1.1 dst-port=80,443
chain=srcnat action=src-nat to-addresses=1.1.1.1 src-address=192.168.1.128 src-port=80,443
# Masquerading
chain=srcnat action=masquerade src-address=192.168.1.0/24 dst-address=192.168.1.0/24
这条规则应该已经存在:
chain=srcnat action=masquerade out-interface-list=WAN
这些规则将启用 "Internal NAT Hairpin",允许内部网络中的设备通过公共IP地址访问同一网络中的其他设备,同时确保数据包正确地处理NAT和端口转发等规则。
"Internal NAT Hairpin" 更准确的翻译应该是 "内部NAT的头发转向" 或者 "内部NAT环路"。
在网络中,当一个内部设备想要访问同一内部网络中的其他设备时,如果这些设备都通过NAT与外部网络通信,则需要进行 "Internal NAT Hairpin"。这意味着数据包必须从源设备发送到路由器,然后被路由器转发回同一网络中的目标设备。这个过程中,路由器需要正确地处理NAT和端口转发等规则,以确保数据包能够成功传递。
[admin@MikroTik] /ip/firewall/nat> print
Flags: X - disabled, I - invalid; D - dynamic
0 chain=srcnat action=masquerade src-address=10.0.1.0/24
out-interface-list=LAN log=no log-prefix=""
1 ;;; 3389
chain=dstnat action=dst-nat to-addresses=10.0.1.112 to-ports=3389
protocol=tcp dst-address-list=ddns dst-port=6666 log=yes
log-prefix="3389"
2 ;;; emby
chain=dstnat action=dst-nat to-addresses=10.0.1.254 to-ports=8920
protocol=tcp dst-address-list=ddns dst-port=8920 log=yes
log-prefix="emby"
3 ;;; NAT
chain=srcnat action=masquerade out-interface-list=WAN log=no
log-prefix=""
------------------------
[admin@MikroTik] /ip/firewall/service-port> /ip/firewall/address-list/
[admin@MikroTik] /ip/firewall/address-list> print
Flags: X - DISABLED, D - DYNAMIC
Columns: LIST, ADDRESS, CREATION-TIME
# LIST ADDRESS CREATION-TIME
17 ddns i.xxxx.com 2024-01-19 00:44:01
;;; i.xxxx.com
18 D ddns 110.00.166.245 2024-01-25 04:06:1
------------------------
#2024年1月25日更新