web-dev-qa-db-ja.com

OpenVPNIPV6トンネルRadvd

ipv6 + openvpn ..に関して興味深い質問があります。

私のバージョンはOpenVPN 2.1.1

私は2つのネイティブ/ 64ipv6ネットワークを与えられました

Block1-> 2a01:abc:123:deac ::/64

Block2-> 2a01:abc:123:dead ::/64

ゲートウェイ-> 2a01:abc:123:deaf :: 1/59)*これを制御することはできません*

計画は、この「Block2」をopenvpn経由でオフィスにルーティングすることでした(テスト目的で)

説明するすごい。

データセンターの最初のLinux「ルーター」としてCentosボックスを使用し、オフィスの2番目のLinux「ルーター」としてUbuntuボックスを使用しています。tunを使用して単純なポイントツーポイントトンネルを作成しました(ipv4アドレスに基づいて開始します。トンネル)

Centosに割り当てました

ip addr add 2a01:abc:123:dead::1/64 dev eth0
ip addr add fed0::2/128 dev tun0

ip route add 2a01:abc:123:dead::/64 dev tun0  ## ipv6 Block2 down the tunnel
ip route add ::/0 via 2a01:abc:123:deaf::1 dev eth0 ## Default out to Gateway

buntに割り当てました

ip addr add fed0::3/128 dev tun0
ip addr add 2a01:abc:123:dead::2/64 dev eth0

ip route add ::/0 via 2a01:abc:123:deaf::1 dev tun0 ## Default up the tunnel

私も両方のサーバーに含めました。

sysctl -w net.inet6.ip6.forwarding=1

よさそうだ...そうだね?違う.. :(

Ubuntu-eth0からゲートウェイまたは2a01:abc:123:dead :: 1にpingを実行できません

Centosボックスの任意のipv6インターフェイスからインターネットにアクセスできますが、Ubuntuボックスからは明らかにアクセスできません。

さらに、私は最終的にUbuntuボックスeth0でradvdを実行し、ネットワークをipv6アドレスでautoconfします。

私を助けるためにいくつかのアドバイス/ヒントを持っている人.. ???

乾杯

1
Arenstar

私が管理している別のネットワークでまったく同じソリューションを使用する可能性があるため、あなたの質問は本当に私を夢中にさせました。私はそれを実験しました、そしてそれは確かに可能です! (私はLinuxが大好きです...)。

私はあなたの状況をモデル化する Netkit ラボを作成しました。ラボをダウンロードできます ここ (1.8KiB)。

マシンでのテストに興味がない場合は、Netkitをインストールする必要はありません。上記のパッケージを入手して、さまざまなマシンの.startupファイルを確認できます。ラボをテストする場合は、「radvd」がインストールされたファイルシステムが必要です。これは、Netkitの標準ファイルシステムには含まれていません。ファイルシステムパッケージのREADME)をチェックして、マシンにマウントする方法を確認してから、apt-get update && apt-get install radvdを使用してください。

ラボには6台のマシンが含まれています:v6site(アクセスしたいV6インターネットサイト)、v6isp(ISP)、r1(V4およびV6接続を備えた最初のルーター)、r2 (OpenVPN経由でr1に接続する2番目のルーター)、pc1およびpc2r2によってIPv6に接続され、提供されるマシン)。

例では、使用したランダムな例のアドレスの代わりに、 RFC 3849 ドキュメントプレフィックス2001:DB8 ::/32を使用しました。また、OpenVPNエンドポイントにFEC0 ::/96を使用しましたが、これは廃止されました。展開では、代わりに 一意のローカルアドレス の小さなプレフィックスを使用することをお勧めします。


説明:RFC 3849 例および文書化の目的で使用されるプレフィックス2001:DB8 ::/32を定義します(グローバルユニキャスト)。ランダムなIPv6アドレスを選択する代わりに、2001:DB8 ::/32プレフィックスのアドレスを、実際の展開で別のアドレスに変更される例のワイルドカードとして使用することをお勧めします。この質問では、最初に2001:acb:132:acb ::/64、次に2001:123:123:11a1 ::/64です。答えでは、両方をドキュメントプレフィックスのアドレスに置き換えました。実際のシナリオに答えを適用するときは、2001:DB8 ::アドレスが出現するたびに検索し、実際のアドレスに置き換えてください。

トンネルエンドポイントにもアドレスが必要です。トンネルエンドポイントで使用されるアドレスは、内部でのみ使用されるため、外部でルーティング可能である必要はありません。 FED1 ::およびFED2 ::で始まるアドレスを使用しましたが、FECO ::で始まるアドレスを使用しました。これらのアドレスは元々 RFC 351 で定義されていました。これらは、IPv4の私用アドレス10.0.0.0/8、192.168.0.0/16、および172.16.0.0/12と同等です。問題のため、後で RFC 3879 で非推奨になり、 RFC 419 の一意のローカルアドレス(ULA)が優先されました。 ULAには、エンドユーザーごとに一意の「ランダム」プレフィックスがあります。利点は、たとえばトンネルを使用してこれらのネットワーク間をルーティングする場合、アドレス変換なしで相互に通信できることです(たとえば、192.168.0.0/16を使用すると、衝突が発生する可能性があります)。この説明の前にリンクされているページは、独自のULAプレフィックスを作成するのに役立ちます(場合によっては登録しますが、登録する必要はありません)。

トンネルエンドポイントでFECxやFEDxなどのサイトローカルアドレスを使用しても、実際の問題はありません。それらは非推奨ですが、それはそれらを間違ったものにしません。 ULAの使用をお勧めします。


最初のルーター(r1)の全体構成は次のとおりです。理解を深めるためにコメントに従ってください。

# Enable forwarding for IPv6 (between eth0 <-> tun0)
sysctl -w net.ipv6.conf.all.forwarding=1

## ISP V6 Internal network
# Since there is no Host specific address, we pick an address in the /64
# prefix. Note that this address is the same in two different prefixes:
# ..11a1::/64 and ..11a0::/59. This requires a proxing hack in R2.
# Optimally, you would have an address in the /59 prefix to use here,
# outside the delegated /64 prefix.
ip link set eth0 up
ip addr add 2001:db8:1:11a1::1/59 dev eth0
ip route add default via 2001:db8:1:11a0::1 dev eth0

## V4 Internet
ip link set eth1 up
ip addr add 192.168.1.1/24 dev eth1

## OpenVPN tunnel via IPv4 Internet to R2
# This is the most basic configuration of OpenVPN. No encryption, no security,
# no nothing. DO NOT USE THIS OUTSIDE THIS LABORATORY.
openvpn --dev tun --tun-ipv6 --daemon

while ! ip link show tun0 2>/dev/null
do
    echo "Waiting for OpenVPN to connect..."
    sleep 1
done

# Configure OpenVPN endpoints. Choose a distinct small prefix for the endpoints
# and use it to route the the /64 prefix to R2.
ip link set tun0 up
ip addr add fec0::1/96 dev tun0
ip route add 2001:db8:1:11a1::/64 via fec0::2 dev tun0

2番目のルーターの全体構成(r2):

# Enable forwarding for IPv6 (between eth0 <-> tun0)
sysctl -w net.ipv6.conf.all.forwarding=1

## Internal Company IPv6 Network
# The router address is arbitrary.
ip link set eth0 up
ip addr add 2001:db8:1:11a1::ffff/64 dev eth0

## V4 Internet
ip link set eth1 up
ip addr add 192.168.1.2/24 dev eth1

## OpenVPN tunnel via IPv4 Internet to R1
# This is the most basic configuration of OpenVPN. No encryption, no security,
# no nothing. DO NOT USE THIS OUTSIDE THIS LABORATORY.
openvpn --remote 192.168.1.1 --dev tun --tun-ipv6 --daemon

# Wait for OpenVPN...
while ! ip link show tun0 2>/dev/null
do
    echo "Waiting for OpenVPN to connect..."
    sleep 1
done

# Configure OpenVPN endpoints. See comments for R1 above.
# Note that we route ALL IPv6 traffic through the tunnel.
ip link set tun0 up
ip addr add fec0::2/96 dev tun0
ip route add default via fec0::1 dev tun0

# R1 address is in our private network (eth0, see above), but on the other
# side of the tunnel. We need a more specific route specifically for it.
# Also, make this router (R2) act as a neighbor proxy so that other
# machines on the private network can see R1 through the tunnel.
# This is a hack that would be avoided if we had a bigger prefix than
# /64, or if R1 had a Host-specific address outside of the /64.
ip route add 2001:db8:1:11a1::1/128 via fec0::1 dev tun0
ip neigh add proxy 2001:db8:1:11a1::1 dev eth0

## Routing advertisement daemon
# NOTE: The standard Netkit filesystem does not have radvd, it has to be
# installed manually with `apt-get update && apt-get install radvd` in
# the model fs.
chmod 644 /etc/radvd.conf
radvd

r1(eth0)に接続されたPCの構成は、radvdのおかげで非常に簡単です。

sysctl -w net.ipv6.conf.all.autoconf=1
ip link set eth0 up

これは最も重要な構成です。その他の詳細(r2の/etc/radvd.confのコピーを含む)は、上記のラボパッケージに含まれています。

2
Juliano

トンネルブローカーに/ 56または/ 48の割り当て、少なくとも別の/ 64を要求します。これで、リンクの遠端のこのブロックに/ 64を生成できるようになります。複数のトンネルがある場合は、トンネルごとに個別の/ 64が必要になります。

FED1アドレスは常にTUNデバイスにのみ存在すると思います。 (サイトのローカルアドレスは非推奨であり、使用しないでください。)Ubuntu側で:: 0/0のルーティングを指定する必要がある可能性があります。 Ubuntu eth0インターフェースには2001:またはFED1:x:アドレスを使用します。 RADVはアドレスを自動的に取得するはずですが、私はそれをでプログラムします。

私の構成では、LANデバイスに/ 48の割り当てを使用し、DMZアドレスに/ 64を使用します。これにより、ファイアウォールの構成が重複しない範囲にあるため、簡単になります。

あなたのpingの結果は私が期待するものです。 UbuntuではFED1 :: 1へのリンクを指定する必要があります。 Centos eth0アドレスをFED1:1 :: 1に変更し、アドレスを/ 32sまたは/ 64sとして指定すると役立つはずです。トンネル端のリンクアドレスを知る必要があるだけです。 eth0インターフェイスには2001 :(パブリックアドレス)が必要です。

Centosのeth0がアップストリームリンクである場合、アップストリームリンクのローカルエンドのポイントツーポイントIPv6アドレスを持っている可能性があります。これは、6to4トンネルのセットアップで処理する必要があります。これにより、インターネットへのデフォルトルートも追加されます。

編集:推奨される構成

Centos(サーバー/ネットワーク)

ip -6 add fe81 :: 1/64 dev tun0 
 ip -6 add 2001:acb:132:acb :: 1/64 dev eth0 
 ip -6 add route(新しい/ 64割り当て)fe81 :: 2 devtun0経由

bunt(トンネル経由のクライアント)

経由/etc/network/interfaces

auto tun0 
 iface tun0 static 
アドレスfe81 :: 2 
ネットマスク64 
ゲートウェイfed1 :: 1 
 

auto eth0 iface eth0 static アドレス(新しい/ 64割り当て):: 1 ネットマスク64
または、VPN起動スクリプトで手動(tun0を処理することもできます)ですが、eth0を/etc/network/interfaces ip-6 add fe81 :: 2/64devで構成します。 tun0 ip -6 add(new/64):: 1/64 dev eth0 ip -6 add route default via fe81 :: 1 dev tun0

Eth0(LAN)インターフェースを使用して、デフォルトのipv6ルートでホストにradvdをセットアップします。 tun0ルーティングは手動で行われます。

警告:これが機能するようになると、すべてのIPv6コンピューターにインターネットでルーティング可能なアドレスが割り当てられます。ファイアウォールが適切であることを確認し、許可するトラフィックを理解してください。

0
BillThor