web-dev-qa-db-ja.com

ポートをIPv4からリモートIPv6デバイスに透過的にトンネリングする方法は?

自宅では、IPv6アドレスに接続しています。さらに、プロバイダーがNATのような設定を提供し、他の顧客と共有するパブリックIPv4アドレスを受け取ります(明らかにIPv4アドレスが不足しているためです)。

その結果、IPv4ネットワークを使用しているときに、自宅のデバイス(VPNゲートウェイなど)にアクセスできません。ただし、IPv4アドレスとIPv6アドレスの両方を持つサーバーがあります。したがって、サーバーを経由すれば、自宅のデバイスにアクセスできるはずです。

これまで私が考えていたのは次のとおりです。IPv6では、各デバイスが独自のIPを取得するため、サーバー自宅は静的IPv6IPを取得します。私のリモートサーバーには、すでに静的IPv4とIPv6の両方があります。

自宅のOpenVPNサーバーにアクセスしたいときは、以前はルーターのポート1194を開き、NATはそこのサーバーに接続を渡していました。新しいシナリオでは、接続したいと思います。リモートサーバーのポート1194(または別のポート1194)で、その接続を取得してホームサーバーにトンネリングする必要があります(どちらもIPv6を使用しているため)。

グラフィカルに、これは次のことを意味します。

モバイルデバイス(IPv4)->リモートサーバー(IPv4 + IPv6)->ホームサーバー(IPv6)

ただし、これは選択したポートでのみ発生するはずです(または、ポートで選択するよりも賢い方法はありますか?)。

私の質問は、どうすればこの設定を実現できますか?

これはどのレベルで動作する必要がありますか?ポートでやりたい場合は、明らかにTCP/UDP層でパケットを転送する必要があります。私の最初のアイデアはiptablesですが、iptablesはパケットをリモートIPに転送できますか?または、他にできるソフトウェアはありますか?または、2つのサーバー間にトンネルを作成して、これをローカルに転送する必要がありますか?どうすればいいですか?

11
javex

私はついに IPv4ポートをIPv6のみのホストに転送する で解決策を見つけました。これは基本的にsocatを使用します:

socat TCP4-LISTEN:22,fork,su=nobody TCP6:[2a01:198:79d:1::8]:22

私のソリューションは、静的IPを除いてホスト名を使用することを除いて、基本的に同じです。ホスト名に四角い括弧を使用しないように注意してください。ホスト名はIPとして解釈されます。

13
javex