natmap
20240813
該項目用於建立從ISP NAT公共地址到本地私人地址的TCP/UDP端口映射。如果NAT的所有層都是全錐(NAT-1),則任何主機都可以通過映射的公共地址訪問內部服務。在綁定模式下,所有流量都不會貫穿此程序。
中文文檔
git clone --recursive https://github.com/heiher/natmap.git
cd natmap
make
# statically link
make ENABLE_STATIC=1
# cross compile
make CROSS_PREFIX= ${cross-toolchain} /bin/x86_64-unknown-linux-
# android
mkdir natmap
cd natmap
git clone --recursive https://github.com/heiher/natmap.git jni
ndk-build Usage:
natmap [options]
Options:
-4 use IPv4
-6 use IPv6
-u UDP mode
-d run as daemon
-i <interface> network interface or IP address
-k <interval> seconds between each keep-alive
-s <addr>[:port] domain name or address of STUN server
-h <addr>[:port] domain name or address of HTTP server
-e <path> script path for notify mapped address
-f <mark> fwmark value (hex: 0x1, dec: 1, oct: 01)
Bind options:
-b <port>[-port] port number range for binding
- <0>: random allocation
- <port>: specified
- <port>-<port>: sequential allocation within the range
Forward options:
-T <timeout> port forwarding timeout in seconds
-t <address> domain name or address of forward target
-p <port> port number of forward target (0: use public port)
# TCP
natmap -s turn.cloudflare.com -h example.com -b 80
# UDP
natmap -u -s turn.cloudflare.com -b 443在TCP模式下,此程序將以兩個步驟建立TCP端口映射:
然後,該程序將撥打參數指定的腳本以在建立端口映射後通知公共地址。該腳本可以更新DNS記錄以進行外部訪問。
請注意,您需要打開防火牆以允許訪問綁定端口。
goto網絡 - >防火牆 - >流量規則
添加流量規則:
如果端口綁定因已經使用而失敗,則該程序將嘗試找出哪個本地服務過程佔據端口並啟用端口重複使用。這在Linux內核5.6及以後起作用,需要作為根運行。
# TCP
natmap -s turn.cloudflare.com -h example.com -b 80 -t 10.0.0.2 -p 80
# UDP
natmap -u -s turn.cloudflare.com -b 443 -t 10.0.0.2 -p 443與綁定模式類似,該程序將在界端口上偵聽,接受傳入的連接,然後將其轉發到目標地址。
另一種方法是使用防火牆的DNAT向前轉發,這種方式應使用綁定模式。
goto網絡 - >防火牆 - >端口向前
添加一個端口向前規則:
{public-addr} {public-port} {ip4p} {private-port} {protocol} {private-addr}
IP4P地址格式使用IPv6特殊地址來編碼IPv4地址和端口,以便於通過DNS AAAA記錄進行分發。
2001::{port}:{ipv4-hi16}:{ipv4-lo16}
麻省理工學院