web-dev-qa-db-ja.com

iptablesを使用してipv6をipv4に転送しますか?

現在私は、修正に永遠にかかる設定のために、ipv4からのみアクセスできるサーバーがあるセットアップを持っています。ただし、ipv6からアクセスできるサーバーもあります。 iptablesを使用して、特定のポートのipv6トラフィックを、サーバーの1つから別のサーバーにipv4トラフィックを使用して転送できるかどうか疑問に思いました。

16
Eli

現在、IPtablesはこれを行うことができないため、接続をプロキシするユーザースペースプロセスが必要です。 socat はこれに適したツールです:

socat TCP6-LISTEN:1234,fork TCP4:1.2.3.4:1234
16
mgorven

質問へのコメント で述べたように、NAT64は3年後であっても準備が整っていません。

ただし、パズル 6tunnel を試してみることもできます。

さいわい、DebianおよびUbuntuリポジトリに存在するため、Sudo apt-get install 6tunnelを使用して非常に簡単にインストールできます。別のシステムを使用している場合は、 source からビルドする必要があります。

ソースからのビルドは本当に難しくはなく、いくつかのコマンドを(rootとして)実行するだけです。

git clone https://github.com/wojtekka/6tunnel && cd 6tunnel && ./autogen.sh && make && make install

簡略化した構文は次のとおりです。

6tunnel [-4|-6][-l local-Host]original-portdestination-Hostdestination-port
  • [-4|-6]はオプションであり、IPv4またはIPv6(それぞれ)でバインド(リッスン)するかどうかを指定できます。
  • -lもオプションです。バインドするアドレス(IPv4またはIPv6)を選択できます。
  • 元のポートは、バインドするポートです。
  • 宛先ホストは、トラフィックの転送先です。ローカルホスト、またはネットワークやインターネット上の別の場所に配置できます。
  • 宛先ポートは、転送されたトラフィックを受信する宛先ホストのポートです。

たとえば、ポート1337でリッスンしているIPv4専用サーバーがIPv6経由でアクセスできるようにするには、次のコマンドを使用します。

6tunnel -6 1337 localhost 1337

上記のコマンドは、IPv6のポート1337でリッスンし、IPv4を介して同じマシンのポート1337にトラフィックを転送します。その後、バックグラウンドで実行されるので、心配する必要はありません。

実際には、cronジョブをセットアップして、それがまだ実行中であることを確認する必要があります。 6tunnelに例を示します 便利です!ブート時にそれを実行することも悪い考えではありません。

詳細については、6tunnel -hまたはman 6tunnelを実行してください。

10
Léo Lam

xinetdの最近のバージョンでは、IPv6をリッスンして、接続をIPv4アドレスに転送することもできます。

ポート3389でIPv6接続をリッスンし、それらを内部IPv4アドレスのポート3389に転送するサンプル構成:

service rdp_port_forward
{
    flags           = IPv6
    disable         = no
    type            = UNLISTED
    socket_type     = stream
    protocol        = tcp
    user            = nobody
    wait            = no
    redirect        = 10.187.20.42 3389
    port            = 3389
}

xinetdはベースシステムと共にインストールされるか、承認されたベンダーのリポジトリで利用できる可能性が高いため、これはより制限された環境で役立つ場合があります。

5
Michael Hampton

Leo Lamsの回答と賛成票についてコメントしたかったのですが、評判がよくありません。まず第一に、レオ・ラムさん、ありがとうございました!

このスレッドに参加する人のために:私のISPは、Dual Stack Liteを使用して接続をIPv4からIPv6に変更しました。つまり、自分のIPv4アドレスをもう持っていません。 IPv6をサポートしていない任意の場所からIPカメラにアクセスしたいので、これは問題でした。これを解決するために、私は以下を試しました:

  1. ルーターのUbuntuマシンへのポート99でIPv6転送を有効にします。
  2. Ubuntuマシン(ホームネットワーク):Sudo 6tunnel -6 99 192.168.178.35 80
  3. 静的IPv4およびIPv6アドレスのvServer Debian:Sudo 6tunnel -4 99 IPV6PREFIXROUTER:IPV6INTERFACEIDUUBUNTUMACHINE 99
  4. vServer Debian:iptablesのポート99での着信TCP接続を許可

ルーターでipv6プレフィックスが示され、インターフェイスIDがIPv6転送プロセスでマッピングされました。

これで、vServerドメインexample.com:99を使用して、どこからでもカメラにアクセスできます。私はこの仕事を果たすラズベリーか、他の仕事のためにバナナパイm3を手に入れる予定です。

3
Crumar

このページを見つける人々の利益のために、OPは必ずしも必要ではありません(私はIPv4(ツイスト)アプリケーションのIPv6接続のソリューションを探してここに来ました)、1つの可能性は、アプリケーション6トンネル、IPv6をリッスンしてリクエストを別のインターフェイスに転送し、港。

2
puzzlement