nat-traverse - クラウド上のオンライン

これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、MAC OS オンライン エミュレーターなどの複数の無料オンライン ワークステーションの XNUMX つを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド nat-traverse です。

プログラム:

NAME


nat-traverse - NAT ゲートウェイを通過するための UDP の使用

SYNOPSIS


単純なテキストのみのトンネルを作成するには、次のコマンドを使用します。

user@left $ nat-traverse 40000:natgw-of-right:40001
user@right $ nat-traverse 40001:natgw-of-left:40000

ここで、40000 は「左側」の未使用の UDP ポート、40001 は「右側」の未使用のポートです。 見る
詳細については、「例」を参照してください。

VERSION


このドキュメントでは nat-traverse v0.5 について説明します。

DESCRIPTION


nat-traverse は、NAT ゲートウェイの背後にあるノード間の接続を確立します。
するホスト パブリック IP アドレスを持っています。 さらに、次の方法で小規模な VPN をセットアップできます。
nat-traverse の上で pppd を使用します (「例」を参照)。 nat-traverse は行います が必要
インターネット上の外部サーバーに接続できるため、関連する NAT を再構成する必要はありません。
ゲートウェイも。 nat トラバース 仕組み すぐに使用できます。

これを実現する方法については、「テクニック」を参照してください。

制限事項: nat-traverse は、ポート番号を変更するゲートウェイでは機能しません。 これ
ポート番号が変更されているため、これは nat-traverse の設計の根本的な問題です (
一般) 予測できません。

OPTIONS


"ローカルポート:ピア:リモートポート" (必須)
使用するローカル ポートと接続するリモート アドレスを設定します。

IP アドレスまたはホスト名を指定する必要があることに注意してください。 NAT ゲートウェイ ホストの
ターゲット ホストにはパブリック IP アドレスがないため、接続先のホストに接続します。

"--cmd="pppd...""
接続を確立した後、指定されたコマンドを実行します。

コマンドは、ソケットにバインドされた STDIN と STDOUT を使用して実行されます。
コマンドが STDOUT に書き込むものはすべてピアに転送されます。

コマンドが指定されていない場合、nat-traverse は入力を STDIN からピアに中継し、
逆も同様です。つまり、nat-traverse は netcat に劣化します。

"--ウィンドウ=10 "
送信する最初のガベージ パケットの数を設定します。 デフォルトの 10 で動作します。
ほとんどのファイアウォール。

"--タイムアウト=10 "
ピアによる確認応答を待機する最大秒数を設定します。

「--接続後に終了」
トンネルが正常に確立された後、nat-traverse を終了します。

nat-traverse は、確立できなかったことを示す 0 以外のステータスコードを返します。
トンネル。

「--quit-after-connect」は、別のプログラムがトンネルを使用する場合に便利です。 のために
たとえば、nat-traverse と同じポートを使用するように OpenVPN を構成できます。
OpenVPN は NAT ゲートウェイを通過できるようになります。

「--バージョン」、「--ヘルプ」

TECHNIQUE


nat-traverse は、NAT ゲートウェイの背後にあるホスト間の接続を確立します。
関連する NAT ゲートウェイの再構成。

1. まず、ホスト「left」上の nat-traverse が、ガベージ UDP パケットを次の NAT ゲートウェイに送信します。
"右"。 もちろん、これらのパケットはファイアウォールによって破棄されます。

2. 次に、「右」の nat-traverse は、ガベージ UDP パケットを「左」の NAT ゲートウェイに送信します。
これらのパケットは、 「左」の NAT ゲートウェイがこれらのパケットを認識しているため、破棄されます。
ステップ 1 で送信されたパケットに応答します。

3. 「左」の nat-traverse は、「右」の NAT ゲートウェイにガベージ パケットを送信し続けます。
NAT ゲートウェイはパケットがドロップされていると認識しているため、これらのパケットもドロップされません。
ステップ 2 で送信されたパケットに応答します。

4. 最後に、両方のホストが確認パケットを送信して、準備ができていることを知らせます。 これらのとき
パケットが受信され、接続が確立され、nat-traverse が中継することができます。
STDIN/STDOUTをソケットに接続するか、プログラムを実行します。


of a 小さい VPN   PPP
ポイントツーポイント プロトコルを使用すると、VPN (仮想プライベート ネットワーク) を簡単にセットアップできます。
デーモン「pppd」:

root@left # nat-traverse
--cmd="pppd updetach noauth パッシブ notty
ipparam VPN 10.0.0.1:10.0.0.2"
40000:natgw-of-right:40001
root@right # nat-traverse
--cmd="pppd nodetach notty noauth"
40001:natgw-of-left:40000

「pppd」は、新しいインターフェース (通常は「ppp0」) を作成します。 このインターフェイスを使用して、ping を実行できます。
10.0.0.1 または 10.0.0.2。 ご覧のとおり、「pppd」はデータ専用トンネル nat-traverse をアップグレードします。
完全な IP トンネルに提供します。 したがって、信頼性の高い TCP 接続を確立できます。
トンネルは UDP を使用しているにもかかわらず、トンネルです。 さらに、IPv6 アドレスを追加することもできます。
「ip -0 addr add...」を実行して「ppp6」に追加します。

ただし、この VPN は is おそらくプライベート ネットワークです。 どれでも確保されている
方法。 SSH を使用して接続を暗号化することもできます。

ポート 輸送   netcat
「netcat」を使用すると、ローカル UDP または TCP ポートの XNUMX つを任意の UDP またはポートに転送できます。
リモート ホストの TCP ポート (「ssh -L」または「ssh -R」と同様):

user@left $ nat-traverse 10001:natgw-of-right:10002
--cmd="nc -vl 20000"
user@right $ nat-traverse 10002:natgw-of-left:10001
--cmd="nc -v ローカルホスト 22"

トンネルが確立されるとすぐに (UDP ポート 10001 および 10002 を使用して)、「左側」の TCP ポート
20000 は「right」の SSH デーモン (TCP ポート 22) に転送されます。

user@他のホスト $ ssh -p 20000 user@left
# 右の SSH デーモンに接続します!

ただし、実際のデータは次のとおりであるため、この例では TCP の信頼性が失われることに注意してください。
UDP経由で転送される。 したがって、これは単なるおもちゃの例です。 信頼性の高いストリームが必要な場合は、PPP を使用してください
上で説明したように、nat-traverse の上にあります。

of a VPN   OpenVPN
使用できますnat-traverse を使用したい場合は、 安全に VPN

nat-traverse 経由で OpenVPN を使用するには、OpenVPN の構成ファイルに XNUMX つの変更を加えるだけで済みます。
OpenVPN のマルチクライアント モードを使用したくないと仮定すると、次のように調整する必要があります。
それに応じて、「code」および「lport」オプションは次のようになります。

# 左側と右側の OpenVPN 構成に追加するオプション:
ポート60001
ポート 60001

# 左側で実行するコマンド。 右:
root@left # まで
nat-traverse --接続後終了 60001:right:60001
do
スリープ5
終わり;
オープンVPN [...]
root@right # まで
nat-traverse --接続後終了 60001:left:60001
do
スリープ5
終わり;
オープンVPN [...]

「until」ループにより、nat-traverse が可能になる前に OpenVPN が開始されないことが保証されます。
接続を確立します。 Michael Kugele (「michael (at) kugele.net」) も次の方法を報告しました。
nat-traverse で OpenVPN のマルチクライアント モードを使用できるようにするには:
nat-traverse は一意のポートを使用する必要があります (接続は
送信元/宛先ポートの組み合わせ)、リダイレクト ルールを使用して、
OpenVPN デーモンがリッスンするポートへの nat-traverse によって使用されるポート:

iptables -t nat -A PREROUTING -p udp
--dport $LPORT -j DNAT --to $HOST:$PORT
iptables -t nat -A PREROUTING -p udp
--dport $PORT -j REDIRECT --to-port $LPORT

$LPORT は、nat-traverse がサーバー側で使用する送信元ポートを指定します。「$HOST:$PORT」
は OpenVPN サーバーのアドレスです)。

制限


IPv4 のみがサポートされており、nat-traverse は IPv6 アドレスでは機能しません。 もしよろしければメモを残してください
IPv6 サポートが必要です。

nat-traverse は、ポート番号を変更するゲートウェイでは機能しません。 これは
nat-traverse の設計の根本的な問題、変更されたポート番号は (一般的に)
予測不可能です。

onworks.net サービスを使用してオンラインで nat-traverse を使用する



最新のLinuxおよびWindowsオンラインプログラム