web-dev-qa-db-ja.com

socatにIPv4スタックとIPv6スタックの両方でリッスンさせる

先日、切り替えられたプロバイダーは、DSlite接続のみを割り当てます。私は元気だと思った。ネットワークの外部から自分のものにアクセスしたいのですが、ネイティブIPv6を入手したので、それほど面倒ではないはずです。

私の新しい主な問題は、ローミングするすべての場所にそれがあるとは想定できないことでした。そのため、ほとんどの場合、IPv4のみのエントリポイントからアクセスしようとします。真のデュアルスタック接続で1つのボックスにアクセスできるため、$ socatが私の友人であることがわかりました。したがって、IPv4のみの接続からIPv6にアクセスするのは、デュアルスタックマシンで$ socat UDP4-LISTEN:sourceport,fork,su=nobody UDP6:my-ipv6-hostname-behind.cgn:targetportを実行し、その後、外部からmy-dualstack-hostna.me:sourceportに接続するのと同じくらい簡単です。

さて、デュアルスタックマシンの$ netstat -tulpen | grep sourceportはUDP4リスナーのみを明らかにします-したがって、私の現在の問題は次のとおりです。

  • IPv6のみの接続からアクセスするには、my-ipv6-hostname-behind.cgn:targetportに接続する必要があります
  • IPv4のみの接続からアクセスするには、my-dualstack-hostna.me:sourceportに接続する必要があります
  • DS(-lite)接続からのアクセスにより、両方を使用できますが、直接IPv6ルートを使用することをお勧めします

したがって、IPv4接続とIPv6接続の両方にmy-dualstack-hostna.me:sourceportを使用でき、ラップトップまたは電話を移動するたびに構成をルート更新しないようにすると便利です。 socatに両方をリッスンさせる方法は?方法がなければなりません! DSマシンの$ netstat -tulpen | grep ":22"はこれらを示しています:

tcp        0      0 0.0.0.0:22 […]
tcp6       0      0 :::22      […]
3
LDericher

私は同じ問題を抱えていました-socatの2つのインスタンスを実行することで解決できます.1つはipv4でリッスンし、もう1つは同じipv6ポートでリッスンしますそれぞれをそれぞれのアドレスにバインド次のように:

socat UDP4-LISTEN:sourceport,bind=<ipv4-addr>,fork,su=nobody UDP6:my-ipv6-hostname-behind.cgn:targetport

socat UDP6-LISTEN:sourceport,bind=<ipv6-addr>,fork,su=nobody UDP6:my-ipv6-hostname-behind.cgn:targetport
4
nosyjoe