OpenVPNトンネルを介したパブリックIPv6トラフィックのルーティング


13

私がやろうとしているのは、vpnトンネルを介してIPv6トラフィックをルーティングすることです。そうすれば、IPv6をサポートしていないネットワークでIPv6を使用できるはずです。

IPv6ブロックが割り当てられたVPSがあります。このブロックの一部は、openvpnクライアントに使用します。2001:db8::111:800:0/112openvpnはサブネットとして/ 64と/ 112のみをサポートするため、私が念頭に置いていた範囲は(プレフィックスは匿名化されています)でした。

トンネルを介したIPv6はすでに動作しています。クライアントから、サーバー(2001:db8::111:800:1)をpingでき、サーバー上のインターフェイス(2001:db8::111:100:100および2001:db8:216:3dfa:f1d4:81c0)もできます。

ただし、クライアントからgoogle.comをpingしようとすると、応答がありません(pingタイムアウト)。この問題をデバッグするために、tcpdumpを使用してサーバー上のトラフィックをキャプチャしました。pingパケットが送信されるのを確認できますが、返信が返ってきません。ip6tablesにログルールを追加すると、同じパケットが送信されますが、何も送信されません。

サーバーからタイムアウトを取得するオンラインtracerouteツールを使用しました。また、インターフェイスに直接IPを設定しようとしましたが、IP(2001:db8::111:800:1001)が到達可能になるため、これはルーティングの問題だと思います。

からipv6の転送を有効にしました/proc/sys/net/ipv6/conf/all/forwarding。ip6tablesには、すべてのチェーンを許可するポリシーがあります。

私の質問は、インターフェイスに割り当てられていないIPのパケットをLinuxが受け入れてさらにルーティングするために、Linuxに必要なものは何ですか?存在するルートだけでは十分ではないようです。

クライアントとサーバーのセットアップは次のとおりです。さらに情報が必要な場合はお知らせください。

クライアント

# ip -6 addresses
10: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qlen 100
    inet6 2001:db8::111:800:1001/112 scope global 
       valid_lft forever preferred_lft forever

# ip -6 routes
2001:db8::111:800:0/112 dev tun0  proto kernel  metric 256 
2000::/3 dev tun0  metric 1024 

サーバ

# ip -6 address
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 2001:db8:216:3dfa:f1d4:81c0/64 scope global dynamic 
       valid_lft 86254sec preferred_lft 14254sec
    inet6 2001:db8::111:100:100/128 scope global 
       valid_lft forever preferred_lft forever
12: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qlen 100
    inet6 2001:db8::111:800:1/112 scope global 
       valid_lft forever preferred_lft forever

# ip -6 route
2001:db8::111:100:100 dev eth0  proto kernel  metric 256 
2001:db8::111:800:0/112 dev tun0  proto kernel  metric 256 
2001:db8::/64 dev eth0  proto kernel  metric 256  expires 86194sec
default via fe80::230:48ff:fe94:d6c5 dev eth0  proto ra  metric 1024  expires 1594sec

あなたが探している可能性POSTROUTING ... MASQUERADEnatテーブル。しかし、完全に理解できるかどうかはわかりません。IPv6トラフィックをトンネルしようとしていますか?ある場合、それぞれの施設を設置していますか?ある-p ipv6IPv4の(!)のルールで許可されたパケットは?
0xC0000022L 14年

ルーターのIP設定(eth0上)がありますか?ルーターを制御していますか?(ルートを追加できますか?)
ysdx 14年

iptablesのrawテーブルTRACEターゲット(ここではそれほど多くないかもしれません)ip neighbour、およびを使用してみてくださいip route get。また、がpingしてgoogle.caいるか指定してください。
ピロナ14年

google.comまたはgoole.comにpingを送信しますか?
トッティ14年

@totti google.com、タイプミスであった
Ikke

回答:


12

このVPNサブネットにサーバーを使用するようにルーターに指示する必要があります。問題に対する正しい解決策は、ルーターにOpenVPNサブネットのルートを追加することです。

ルーターにアクセスできないためにこれができない場合、別の解決策はeth0リンク上のクライアントにNDPプロキシをセットアップすることです。

VPSを使用しているため、おそらくルーターにルートを追加することはできません。おそらく2番目のソリューションを使用する必要があります。

サブネットのルートを追加します

問題の正しい解決策は、VPNサブネットをOpenVPNサーバー経由でルーティングする必要があることをルーターに伝えることです(これはLinux用です)。

ip route add 001:db8::111:800::/112 via 2001:db8::111:100:100

サーバーでIPv6転送を有効にする必要があります。

sysctl sys.net.ipv6.conf.all.forwarding=1

NDPプロキシ

ルーターは、eth0リンク上でIPv6範囲全体を送信するように構成されているようです。NDPプロキシをセットアップできます。

eth0クライアントからインターネットの残りの部分にアクセスしようとすると、OpenVPNサブネットのサーバーのインターフェースにNDP要求が表示されるはずです。

サーバーとNDPプロキシでもIPv6転送を有効にする必要があります。

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

サブネットNDPプロキシ

Linuxカーネルでは、サブネットにNDPプロキシを追加することはできませんが、個々のIPにのみ追加できます。デーモン(ndppdなど)を使用して、サブネット全体に対してNDPプロキシをセットアップでき ます(決して使用しません)。

IP NDPプロキシごと

別の解決策は、VPNサブネットの各IPv6にNDPプロキシを追加することです。

for i in $(seq 0 65535) ; do
  ip neigh add proxy 2001:db8::111:800:$(printf %x $i) dev tun0
done

OpenVPNサブネットに比較的少数のIPがあるため、これは機能するはずです。

OpenVPNフックを使用した動的NDPプロキシ

OpenVPNフックを使用して、NDPプロキシを動的に追加できる必要があります。

OpenVPNサーバーconfにフックを追加します。

learn-address /etc/openvpn/learn-address

次のlearn-addressスクリプトを使用します。

#!/bin/sh

action="$1"
addr="$2"

case "$action" in
    add | update)
        ip neigh replace proxy "$addr" dev tun0
        ;;
    delete)
        ip neigh del proxy "$addr" dev tun0
        ;;
esac

この参照のスレッドを

短い答え

for i in $(seq 0 65535) ; do
  ip neigh add proxy 2001:db8::111:800:$(printf %x $i) dev tun0
done

1
おかげで、私はそれを調べます。私は今、問題を理解しています。ipsidixit.net/2010/03/24/239にはこれに関する詳細が含まれています。
イッケ14年

クライアントからのIPをネイバープロキシとして使用しています。sys.net.ipv6.conf.all.proxy_ndpを有効にしましたが、google.comにpingできません。サーバーを確認すると、eth0でndp solicationsパケットが送信されますが、広告は送信されません。
イッケ14年

1
npd6をインストールして設定した後、突然動作します!
イッケ14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.