
Debian SidでOpenVPNを使用してIPv6トンネルを作成しようとしています。 IPv4 はうまく機能しますが、IPv6 は機能できません。 IPv6を使用してサーバーと他のクライアントにpingを実行できますが、クライアントはインターネットにアクセスできません。
数時間研究していますが、まだIPv6を完全に理解していないため、この問題は簡単に解決できます。説明もしていただければいいと思います!
問題は、VPSを使用していてすべてを処理できる/ 64サブネットしかないことです。
2a00:a123:4:b5::/64
それで、これをOpenVPN設定に追加できると思いました(/112
OpenVPN用のより小さなサブネットを作成)。
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
これがeth0
OpenVPNではなくネットワークデバイスの名前であると仮定します。
これは、ホストがデバイスに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プロキシも不要です。