このプロジェクトは、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 443TCPモードでは、このプログラムは2つのステップで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特別アドレスを使用して、DNS AAAAレコードを介して簡単に配信できるIPv4アドレスとポートをエンコードします。
2001::{port}:{ipv4-hi16}:{ipv4-lo16}
mit