web-dev-qa-db-ja.com

OpenVPNを介したIPv6ルーティング

IPv6がOpenVPNでどのように機能するかを学ぼうとしているので、次のスキームを設定したいと思いました。

/ 48サブネットが割り当てられたVPSサーバー(Ubuntu)があります。

ISP ipv6 gateway is XXXX:XXXX:XXXX::1
Server ipv6 address is XXXX:XXXX:XXXX:39::1

サーバーに接続しているクライアントはすべて、XXXX:XXXX:XXXX:39:2 ::/64サブネット上のIPアドレスを取得するという考え方です。

サーバー構成ファイルは、OpenVPNのサンプル構成に基づいており、以下が追加されています。

dev tun
tun-ipv6
server-ipv6 XXXX:XXXX:XXXX:39:2::/64
Push "route-ipv6 XXXX:XXXX:XXXX:39::/48"

OpenVPNサーバーを再起動しても問題はありませんでした。

サーバーには次のIPアドレスが割り当てられます。

eth0: XXXX:XXXX:XXXX:39::1/48
tun0: XXXX:XXXX:XXXX:39::2/64

クライアントが割り当てられます:

OpenVPNタップ:XXXX:XXXX:XXXX:39:2:0:1:0、そしてXXXX:XXXX:XXXX:39 :: 1に問題なくpingできます。ただし、クライアントからISPゲートウェイにpingを実行すると、接続がタイムアウトします。

サーバーからISPipv6ゲートウェイにpingを実行できます。

UbuntuファイアウォールでXXXX:XXXX:XXXX:39:2 ::/64からのトラフィックを許可しました。

何が足りないのですか?

サーバーがOpenVPNバージョン2.2.1を実行していることに言及する必要があります-それは不平を言う理由ですか?

私のホストサーバーをIPv6ゲートウェイとして使用するのはそれほど簡単ではなかったことがわかりました。多段階のプロセスですが、実行可能です。

私はここで少し質問することになったので、以下は私がその過程で学んだことの要約です。

ルーティング可能なサブネットを取得するために、ハリケーンエレクトリックに行き、ハリケーンエレクトリックからルーティングされた/ 48サブネットを取得しました。独自のサブネットを取得する方法の詳細については、 https://tunnelbroker.net にアクセスしてください。

それらは、IPv4トンネルを介してルーティングされたIPv6を提供し、/etc/interfacesに何を追加する必要があるかも教えてくれます。

トンネルリンク上のIPv6アドレスは、2001:470:xxxx:xxx::/64の形式です。したがって、次の行を/etc/interfacesに追加する必要があります。

auto he-ipv6
iface he-ipv6 inet6 v4tunnel
    address 2001:470:xxxx:xxx::2
    netmask 64
    endpoint <ipv4 address Tunnelbroker side> 
    local <public ipv4 address your side>
    ttl 255
    gateway 2001:470:xxxx:xxx::1

しかし、私のサーバーにはすでにパブリックIPv6アドレスがあるため、Tunnelbrokerサブネットから何かにpingを実行する前に軽減する必要があるいくつかの問題が発生します。

ポリシーベースのルーティングを入力します。

サーバーは、送信元IPv6アドレスに応じて、IPv6トラフィックに対してどのアウトバウンドリンクを使用するかを決定するという考え方です。

ルールはとてもシンプルです。

  • トラフィックがサーバー自体から発信されている場合は、デフォルトゲートウェイを使用します。
  • トラフィックが私の/ 48サブネットから発信されている場合は、IPv6 overIPv4リンクを使用します。

これは、2つのルーティングテーブルが必要であることを意味します。デフォルトのルーティングテーブル(mainと呼ばれます)と独自のテーブル(私はmynet6と呼ばれます)。

まず、カスタムルーティングテーブルのエントリを追加します。

echo 100     mynet6 > /etc/iproute2/rt_tables

簡単に言うと、サブネット2001:db8:cafe::/48が割り当てられているとします。

/ 48サブネットはVPNリンク上にのみ存在するため、VPNリンクがアップしているときにOpenVPNによって呼び出されるスクリプトを作成しました。スクリプトは次のようになります。

# Reset IPv6 routing table.
ip -6 rule flush

# Add default IPv6 rules again - since they gets deleted by the initial rule 
# flush command.
ip -6 rule add priority 32766 from all table main

# Reset Tunnelbroker routing table (table name: "mynet6").
ip -6 route flush table mynetv6

# All traffic from my /48 subnet should be added to Tunnelbroker routing table
ip -6 rule add priority 32000 from 2001:DB8:CAFE::/48 table mynet6

# Add routeable VPN subnets to Tunnelbroker routing table
ip -6 rule add from 2001:DB8:CAFE::/48 table he-ipv6

# Remember to add a rule that if no machine does not respond to a 
# packet address in my /48, then we should return unreachable. 
# Else the package will be forwarded by default out through the 
# Hurricane Electric connection.

#(From the Internet)
ip -6 route add unreachable 2001:DB8:CAFE::/48

#(From my /48 subnet)
ip -6 route add unreachable 2001:DB8:CAFE::/48 table mynet6

# Any traffic that originates from VPN has to be forwarded via Tunnelbroker 
# routing table using the tunnelbroker link (link name: he-ipv6).
ip -6 route add default via 2001:470:xxxx:xxx::1 dev he-ipv6 table mynet6

構成の検証

次のコマンドを使用して、ルーティング設定を確認できます。

ip -6 rule show

次のようなものが含まれている必要があります。

0:      from all lookup local
32000:  from 2001:db8:cafe::/48 lookup mynet6
32766:  from all lookup main

Tunnelbrokerリンクのルーティングテーブルは次の場所にあります。

ip -6 route show table mynet6

そしてそれは次のようなものを出力するはずです:

unreachable 2001:470:78d6::/48 dev lo  metric 1024  error -113 pref medium
default via 2001:470:xxxx:xxx::1 dev he-ipv6  metric 1024  pref medium

デフォルトのルーティングテーブルはここにあります:

ip -6 route show table main

そして、それはとりわけ次の行を持っている必要があります:

unreachable 2001:470:78d6::/48 dev lo  metric 1024  error -113 pref medium
default via XXXX:XXXX:XXXX::1 dev eth0  metric 1024  pref medium

これは、サーバーが/ 48サブネットからトラフィックを受信するときにサーバーが実行する必要があることを考慮に入れる必要があります。/48サブネットを独自のネットワークに割り当てる方法はまったく別の章であり、ここでは取り上げません。 :-)