LoginSignup
0
1

More than 5 years have passed since last update.

systemd-networkdでIPv6トンネルとネイティブIPv6を同時接続する

Posted at

前提

未だにIPv6が/128しか振られなかったり不安定なルータに悩まされているため、he.netのIPv6 tunnel brokerを利用しつつ、ネイティブなIPv6も念の為維持したい。いわゆるマルチホームを行う。

  • systemd-networkdで設定をまとめたい。
  • 基本的なIPv4/IPv6は特に問題なく設定できている
  • Ubuntu 18.04で実施。netplanでは実現できそうにないので使わない。
  • 外向き接続時にtunnelをネイティブ割当より優先するが、両方でlistenできること。
  • 通常のインターフェースens3を通るsitトンネルをheとして作成。

ルーティング設定

Linux iproute2のPolicy Routingで複数のtableを使って実現できる。これはlinux multi homeあたりで検索すればいろいろ出てくる。

以下挙動の理解が怪しいが、外向きの接続の場合、

  • ip route show table mainを参照してリモートアドレスに対応するインターフェースが判定される
    • デフォルトルートのmetricを自動生成される1024より小さくしてdev heを優先させる
  • 決定したルートdev heにしたがってsrc節かip addrでインターフェースに設定されているアドレスが送信元として使用される
  • 生成されたパケットはip ruleの送信元IPアドレス範囲のフィルタでどのテーブルを使うか振り分ける
  • ネイティブならtable 10を参照させる
    • table 10にデフォルトルートと送信元IPアドレスを指定
    • ついでにon-linkなネットワークも指定
  • トンネルならtable 20を参照させる
    • これはmainテーブルと同じことをしているので本来は必要ない。優先度を簡単に切り替え(tunnel > native)したい時のために書いてある

systemd.network周り

systemd-networkdでは、.networkファイルの[Route]節が設定されたルーティングテーブル1エントリに対応する。
ややこしいことに[Route]ではip route addfromSource=, srcPreferred Source=が対応するようだ。

[Route]での対応
* dest: Destination=
* via: Gateway=
* dev: networkファイルに対応するインターフェース自身
* from: Source=
* src: PreferredSource=

ip rule[RoutingPolicyRule]が対応する。
ここではip rule add srcFrom=に対応。統一してよ……

[RoutingPolicyRule]での対応
* from: From=
* to: To=

設定例

# cat /etc/systemd/network/10-ens3.network
[Match]
Name=ens3

[Network]
Address=ipv4_addr/24
Gateway=ipv4_gw
Address=ipv6_addr/64
Gateway=ipv6_gw
Tunnel=he

[RoutingPolicyRule]
# source route
Table=10
From=ipv6_net/64
Priority=100

[Route]
# default route
Table=10
Gateway=ipv6_gw

[Route]
# link-local
Table=10
Destination=ipv6_net/64
Metric=256

# cat /etc/systemd/network/50-he.netdev
[NetDev]
Name=he
Kind=sit
MTUBytes=1480

[Tunnel]
Remote=tunnel_server
TTL=64
# cat /etc/systemd/network/50-he.network
[Match]
Name=he

[Network]
Address=tunnel_addr/64

[Route]
Gateway=tunnel_gw

# prefer he tunnel over native
Metric=512
# prefer native over he
# Metric=1536

[RoutingPolicyRule]
From=tunnel_net/64
Table=20
Priority=200
[Route]
Gateway=tunnel_gw
Table=20

動作確認

  • 外部からens3とheの両方にpingが通ること
  • 内部から外向きIPv6接続でheが優先されることを確認
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1