VPSでIPv6を使用するOpenVPN

VPSでIPv6を使用するOpenVPN

Debian SidでOpenVPNを使用してIPv6トンネルを作成しようとしています。 IPv4 はうまく機能しますが、IPv6 は機能できません。 IPv6を使用してサーバーと他のクライアントにpingを実行できますが、クライアントはインターネットにアクセスできません。

数時間研究していますが、まだIPv6を完全に理解していないため、この問題は簡単に解決できます。説明もしていただければいいと思います!

問題は、VPSを使用していてすべてを処理できる/ 64サブネットしかないことです。

2a00:a123:4:b5::/64

それで、これをOpenVPN設定に追加できると思いました(/112OpenVPN用のより小さなサブネットを作成)。

server-ipv6 2a00:a123:4:b5:80::/112
push "route-ipv6 2000::/3"

今実行すると、ifconfig tun0次のようになります。

inet6 addr: 2a00:d880:6:f2:80::1/112 Scope:Global

私の顧客は次のようになります。

client1,10.8.0.2,2a00:d880:6:f2:80::1000
client2,10.8.0.3,2a00:d880:6:f2:80::1001

SolusVM CPにこの4つのIPをすべて追加しました。 (必要なものはわかりませんが、VPSに再ルーティングするためのようです。)私もnet.ipv6.conf.all.forwarding設定しました1

それでもクライアントはIPv6経由でインターネットにアクセスできません。traceroute6 google.comクライアントで実行するとサーバーIPが取得されますが、その後はタイムアウトします。

私もこれを見つけました。エマルジョンしかし、NDPプロキシを使用することは私には適していないようです。

ip neigh add proxy 2a00:d880:6:f2:80::1000 dev tun0
ip neigh add proxy 2a00:d880:6:f2:80::1001 dev tun0

答え1

私もSNATが正しい選択だとは思わない。同様の問題があり、正しい配信ルールといくつかの調整が必要であることがわかりました。デフォルトでは、OpenVPNインターフェイスからIPv6が設定されている外部WANインターフェイスにIPv6トラフィックを転送するだけです。

ip6tables は、VPS 経由の OpenVPN の IPv6 トラフィックを許可します。

あなたの場合、これはうまくいくと思います。

ip6tables -A FORWARD -m state --state NEW -i tun+ -o $WAN -s 2a00:a123:4:b5::/64 -j ACCEPT
ip6tables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

イーサネットブリッジングの代わりにルーティングを使用しているとします。

必要な唯一のFORWARDルールである/ 64ブロックのみがあるようです。

$ WANは、IPv6接続を使用する外部インターフェイスのプレースホルダです。私のVPSにはデフォルトのIPv6がないので、私の場合はトンネルインターフェイスsat1(CentOS)です。 IPv6ブロックがあるようなので、外部WANインターフェイスになります。

正しい転送ルールが適用されると、IPv6トラフィックはファイアウォールによってブロックされずに通過できます。ほとんどの場合、NATはIPv6に関連付ける必要はありません。

答え2

まず、Proxy_ndpを有効にする必要があります。

 sysctl -w net.ipv6.conf.all.proxy_ndp=1

(そしてその行をに追加します/etc/sysctl.conf)。

これで正しいコマンドは次のようになります。

ip neigh add proxy 2a00:d880:6:f2:80::1000 dev eth0
ip neigh add proxy 2a00:d880:6:f2:80::1001 dev eth0

これがeth0OpenVPNではなくネットワークデバイスの名前であると仮定します。

これは、ホストがデバイスにNDPプロキシサービスを提供する必要があることを意味しますeth0

  • 誰かが dev0 リンクから「2a00:d880:6:f2:80::1000」を要求したら、「はい、私です」と言う必要があります。

  • これは、ホストがeth0リンクから2a00:d880:6:f2:80::1000パケットを受信することを意味します。

  • どのインターフェイスが実際に2a00:d880:6:f2:80::1000であるかを知らせる必要はありません。 IPv6 ルーティング テーブルが正しいパスを適切な宛先にルーティングするタスクを処理します。

そして、IPv6 IP転送を有効にすることを忘れないでください。

sysctl -w net.ipv6.conf.all.forwarding=1

答え3

まあ、何時間も努力した後、私は簡単なことをするのを忘れました。ファイアウォールルールを追加します。

ip6tables -t nat -A POSTROUTING -s 2a00:a123:4:b5:80::/112 -j SNAT --to 2a00:a123:4:b5::1234

SolusVM CPにIPを追加する必要はありません。 NDPプロキシも不要です。

関連情報