私は次の設定をしています:
トンネルのおかげで、サーバーはIPv6経由でインターネットに正常に接続できるようになりましたが、dnsmasqで他のデバイスにIPv6を提供することができません。
これが私の/etc/dnsmasq.conf
の関連部分です:
except-interface=tun0
# pick up prefix from tun0
dhcp-range=::2,::500,constructor:tun0,slaac, 12h
enable-ra
# try to force advertisement on br0
ra-param=br0,30
Dnsmasqを起動すると、次の出力が表示されます(英語に翻訳し、ipv6/routerアドバタイズメント以外の部分を省略しました)。
Compile options: IPv6 GNU-getopt DBus i18n IDN2 DHCP DHCPv6 no-Lua TFTP conntrack ipset auth DNSSEC loop-detect inotify dumpfile
DHCP, IP-range 192.168.0.2 -- 192.168.0.100, Lease time 12h
DHCPv6, IP-range ::2 -- ::500, Lease Time 12h, template for tun0
Router-Advertisment on tun0
IPv6-Router-Advertisement enabled
デフォルトでは、br0インターフェイスにはリンクローカルアドレスのみがあり、dnsmasqで使用される範囲からのリンクはありません。ただし、この範囲のアドレスを指定した後でも、アドバタイズメントはtun0についてのみ報告されます。
Dnsmasqにbr0経由でアドバタイズを実行させるにはどうすればよいですか?
編集されたIPアドレスは
リモートサーバー:
eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
inet xx.xx.xx.xx brd xx.xx.xx.xx scope global eth0
valid_lft forever preferred_lft forever
inet6 2a01:xxxx:xxxx:xxxx::1/64 scope global deprecated
valid_lft forever preferred_lft 0sec
inet6 fe80::xxxx:xx:xxxx:xxxx/64 scope link
valid_lft forever preferred_lft forever
tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
link/none
inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
valid_lft forever preferred_lft forever
inet6 2a01:xxxx:xxxx:xxxx:8000::1/65 scope global
valid_lft forever preferred_lft forever
inet6 fe80::xxxx:xx:xxxx:xxxx/64 scope link stable-privacy
valid_lft forever preferred_lft forever
私のローカルサーバー上
br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
inet 192.168.0.1/24 brd 192.168.0.255 scope global br0
valid_lft forever preferred_lft forever
inet6 2a01:xxxx:xxxx:xxxx:8000::500/65 scope global
valid_lft forever preferred_lft forever
inet6 fe80::xx:xxxx:xxxx:xxxx/64 scope link
valid_lft forever preferred_lft forever
tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
link/none
inet 10.8.0.6 peer 10.8.0.5/32 scope global tun0
valid_lft forever preferred_lft forever
inet6 2a01:xxxx:xxxx:xxxx:8000::1000/65 scope global
valid_lft forever preferred_lft forever
inet6 fe80::xxxx:xxxx:xxxx/64 scope link stable-privacy
valid_lft forever preferred_lft forever
64ビットのプレフィックスはすべての2a01アドレスで同じです。
[〜#〜]編集[〜#〜]
grawityの答え から次の設定を試してみました:
リモートサーバー上/etc/openvpn/server.conf
server-ipv6 fc00::/96
# use low metric to override existing route
route-ipv6 2a01:xxx:xxxx:xxxx::/64 ::1 1
# enable routing to remote on local server
Push "route-ipv6 2a01:xxxx:xxxx:xxxx::1/128 ::1 1"
$ ip addr
eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 96:00:00:27:b7:14 brd ff:ff:ff:ff:ff:ff
inet xx.xx.xx.xx brd 116.202.98.219 scope global eth0
valid_lft forever preferred_lft forever
inet6 2a01:xxxx:xxxx:xxxx::1/64 scope global deprecated
valid_lft forever preferred_lft 0sec
inet6 fe80::xxxx:xxxx:xxxx:xxxx/64 scope link
valid_lft forever preferred_lft forever
tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
link/none
inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
valid_lft forever preferred_lft forever
inet6 fc00::1/96 scope global
valid_lft forever preferred_lft forever
inet6 fe80::xxxx:xxxx:xxxx:xxxx/64 scope link stable-privacy
valid_lft forever preferred_lft forever
$ ip -6 route
2a01:xxxx:xxxx:xxxx::/64 dev tun0 metric 1 pref medium
2a01:xxxx:xxxx:xxxx::/64 dev eth0 proto kernel metric 256 pref medium
fc00::/96 dev tun0 proto kernel metric 256 pref medium
fe80::/64 dev eth0 proto kernel metric 256 pref medium
fe80::/64 dev tun0 proto kernel metric 256 pref medium
default via fe80::1 dev eth0 metric 1024 pref medium
私のローカルサーバー:/etc/dnsmasq.conf
# start with 3 to avoid assigning the remote eth0 and local br0 addresses
dhcp-range=::3,constructor:br0,slaac, 12h
enable-ra
$ ip addr
br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 0c:c4:7a:02:09:cc brd ff:ff:ff:ff:ff:ff
inet 192.168.0.1/24 brd 192.168.0.255 scope global br0
valid_lft forever preferred_lft forever
inet6 2a01:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:9cc/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 6930sec preferred_lft 6930sec
inet6 2a01:xxxx:xxxx:xxxx::2/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::xxxx:xxxx:xxxx:xxxx/64 scope link
valid_lft forever preferred_lft forever
tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
link/none
inet 10.8.0.6 peer 10.8.0.5/32 scope global tun0
valid_lft forever preferred_lft forever
inet6 fc00::1000/96 scope global
valid_lft forever preferred_lft forever
inet6 fe80::xxxx:xxxx:xxxx:xxxx/64 scope link stable-privacy
valid_lft forever preferred_lft forever
$ ip -6 route
::1 dev lo proto kernel metric 256 pref medium
2a01:xxxx:xxxx:xxxx::1 dev tun0 metric 1024 pref medium
2a01:xxxx:xxxx:xxxx::/64 dev br0 proto kernel metric 256 pref medium
2a01:xxxx:xxxx:xxxx::/64 dev br0 proto ra metric 1024 expires 6243sec pref medium
fc00::/96 dev tun0 proto kernel metric 256 pref medium
fe80::/64 dev br0 proto kernel metric 256 pref medium
fe80::/64 dev tun0 proto kernel metric 256 pref medium
default dev tun0 metric 1024 pref medium
この構成を使用すると、LANデバイスは2a01:xxxx:xxxx:xxxx/64からIPv6を取得します。 LAN内でこれらのアドレスに正常にpingを実行できますが、トンネルの交差点が壊れているようです。
次のIPを持っている:
リモートサーバーから、3番目(ローカルサーバーbr0)を除くすべてにpingを実行できます。ローカルサーバーからすべてにpingを実行できます。 LANから、すべてのローカルにpingを実行できますが、リモートにはpingを実行できません。
したがって、その半分は機能しているようです。さらに、2a01:xxx:xxxx:xxxx/64のすべてのトラフィックが、リモートのtcpdumpを介してリモートのeth0にルーティングされ、別のIPv6ホストからpingされていることを確認できました。
サーバーには/ 64がルーティングされていますか、それとも/ 64がリンク上で利用可能ですか? (リンク上にある場合、サーバーでproxy_ndpのようなものをすでに使用していますか?)
多くのVPSプロバイダーが(推奨されるルーティングされたプレフィックスの代わりに)オンリンク範囲を割り当てるため、これを尋ねました。これは、プロバイダーのローカルゲートウェイが/ 64内のすべてのアドレスがローカルであると見なしていることを意味します:NDPを送信することを期待しています(ARP)はそれらを照会し、サーバーがそれらのいずれかに応答することを期待します。
通常、システムは、そのインターフェースに割り当てられた個々のアドレスのネイバー要請にのみ応答します。あなたの場合、サーバーは2a01:xxxx:xxxx:xxxx :: 1に対してのみ応答しますが、VPNに使用するすべてのアドレスについては何もしません。その結果、サーバープロバイダーのゲートウェイは、これらのアドレスがすべてLANに存在しないと見なし、到達不能として報告します。
これは、サーバーで「NDPプロキシ」を有効にして、VPNで使用している/ 65に対して「なりすまし」応答を送信するようにすることでハッキングできます。理論的には、これは、プロバイダーの観点から、ローカルにアドレスを持っていることと区別がつかないはずです。
2つのサーバー間でIPv6/64の上半分を/ 65としてトンネリングするIPv4OpenVPN接続
通常、SLAACは/ 64以外には使用できません。 (元々、自動構成でEUI64ベースのアドレスが使用されていたためです。)したがって、最初のステップは、より短いプレフィックスを取得することです。/56または少なくとも/ 60で、複数のネットワークに分割できます。
LANに/ 64以外のプレフィックスを使用する必要がある場合は、静的IP構成またはおそらくDHCPv6(それをサポートするデバイスの場合。すべてが使用できるわけではありません)のみを使用できます。
/ 64を共有する以外に選択肢がなく、requireSLAACが機能する場合は、br0で/ 64として構成およびアドバタイズする必要があります。インターフェイスであり、プロキシNDPを使用して両側にパッチを適用する必要がある場合があります。 (プロキシARPに似ていますが、IPv6用です。)つまり、ndppdを使用して、下位/ 65のNDクエリに応答する必要があります。
デフォルトでは、br0インターフェイスにはリンクローカルアドレスのみがあり、dnsmasqで使用される範囲からのリンクはありません。
システムは2つのネットワーク間のルーターとして機能しており、各インターフェイスshouldには通常、所属するネットワークのアドレスがあります。 (192.168.1.0/24を処理するルーター自体が、その範囲のアドレスを持つようになります。)
ただし、さらに重要なのは、各リンクにuniqueプレフィックスを割り当てる必要があることです。 「ローカル」システムには、同じ2a01:xxxx:xxxx:xxxx:8000 ::/65プレフィックスを使用する2つのインターフェースがあります。そのため、LANホストがアドレスを構成しても、ルーターはパケットを正しく転送できません。つまり特定のアドレスがtun0経由とbr0経由のどちらで到達可能かはわかりません。ブランケット/ 65ルートは2つしかないため、すべてのトラフィックに対して常に同じルートが選択されます。
運が良ければ、br0ルートが選択され、LANホストは2a01:xxxx:xxxx:xxxx:8000 :: 1でサーバー自体に到達できなくなりますが、それ以外はすべて機能する可能性があります。運が悪ければ、tun0ルートが選択され、パケットが反映されるため、サーバーはLANホストに何も送信できなくなります。
この状況では、OpenVPNトンネルは実際には/ 65からのアドレス指定を使用する必要はまったくありません。例えばプライベートアドレスを使用できます。いずれの場合も、/ 65はローカルbr0インターフェイスに対してdedicatedである必要があり、dnsmasqではconstructor:br0
を使用する必要があります。
サーバーOpenVPN構成の例:
server-ipv6 fd6a:d884:2a8b:11b::/96
route-ipv6 2a01:xxxx:xxxx:xxxx:8000::/65
そして、クライアントのccdで:
iroute-ipv6 2a01:xxxx:xxxx:xxxx:8000::/65
サーバーインターフェイスの例:
eth0: 2a01:xxxx:xxxx:xxxx:0000::1/65 (note prefix length)
tun0: fd6a:d884:2a8b:11b::1/96
クライアントインターフェイスの例:
tun0: fd6a:d884:2a8b:11b::1000/96
br0: 2a01:xxxx:xxxx:xxxx:8000::1/65
Dnsmasq構成の例:
enable-ra
dhcp-range = ::2, ::500, constructor:br0, 12h
# you can't get SLAAC with a non-/64 prefix, so it's DHCPv6 only