IPV6ルータ構築の顛末

RaspberryPi
RaspberryPiServer記録

数年前から、プロバイダが対応してIPV6が使えるようになってきている。市販ルータの対応が今一つで、何やっているかよくわからないし、対応しきれていないので、Linuxで自作していた。内部の機器を独自のDNSに登録し、かつDHCPで自動的にDNSに登録することにしていた。また、プロバイダの提供方法も変わってきておりそれの変化に対応してきていた。ここでは、過去の経緯を記憶で書いておき、これからのことも書いておいて、同じことを繰り返さないようにする。

ndppdの設定を削減したので更新。

その1 PPPoEの時代

時期は忘れたが、最初はPPPoEだった。接続自体は簡単で、ルータ化することはできなくはないのだが、トリッキー過ぎた。IPセグメントが潤沢に割り当てられる(光電話を使ってたからとの話もある)ので良かったのだが、接続後に取得できるIPなどの情報を、他の設定に使わなければならない。自動で反映する方法がわからなかった。手動で、実施すればよいのだが、ものによっては全端末に反映せなばならず。どうやって反映しすればよいかわからなかった。後にradvdが使えると解ったのは後の時代になる。また、IPV4とIPV6のDNSをどう混ぜればよいか(フレッツのDNSと外のDNSと言うのが正しいかも)もトリッキー過ぎた。フレッツのドメインをフレッツのDNSのに向けるのだが、IPアドレスがここを見に行くとなってるのだが、自動化する方法がわからなかった。ここで他の都合もあってリースの光電話のルータに一任するようにしていた。ルータの対応が宣言されていたが、アップデートが出るまで長かった。1年以上待たされた。出た頃には忘れていたという言い方もある。

その2 市販(光電話)ルータの対応の時代

使っていたルータがPPPoEのIPV6に対応して、勝手にやってくれるようになった。だがそれ以前に、いつの間にかIPoEになって勝手にIPV6がが流れ込むようになっっていた。正直このときはよくわからなかったので時間をかけて調べることにして使わないようにしていた。IPV4ではNATが当たり前として、プロパイダの接続は内部と独立していた。IPV6はそうは行かないので、どうなるのかが今ひとつわからなかった。結局この期間は短かかった。プロバイダーの契約をdocomo経由のocnに契約し直して、光電話をやめたのだ。

その3 プロパイダ変更によって(黒歴史)

お金の話で、プロパイダを変更したのだが、光電話のルータがなくなることを深く考えていなかった。工事して気がついた。このとき気が付かなかったが、IPoE対応のプロバイダに契約したフレッツは実はIPV6はルータはなくてもよいのだ。FWがなくなるけど。IPV4にはルータが必要になるという、なにかいろいろ言いたくなる環境になっていた。日頃から、なんでPPPoEなんか使うんだろうかと思ってたが、IPV6はいらなくなってるのだ。さらに、DNSが統合されていた。IPの割当も統合されているようだ。どのようにかよくわからないが、2つの世界が混在して被害が出ていたらしい。これを解消するように密かに統合したようだ。このときはそれに気が付かずに検討した。PCでルータにすることも考えたが、インターネットに接続できないと、調べることもできない。で、安いルータを買ってきた。Wifi付きしか売っていないのにはその時驚いた。後で調べると、メインサーバに以前のPPPoE(IPV4)の設定がのこっていて、3分でできたというオチがある。そこから、安いルータをいろいろ見ていたらIPV6対応があった、しばらく使っていて、そのまま素で通してると気がついてPCサーバをルータにすることに決めた。ただ、メインのPCサーバが老朽化していたのでいじりたくなかったので、これを入れ替えることを先にしていた。そしたら、Map-eの時代になっていた。

その4 Map-e(IPV4)の対応していたら一緒に書いてあったIPV6の使い方(radvd とntppdを使う)

この頃コロナ騒ぎの巣ごもり需要でPPPoE IPV4の遅さに困り果てていた。Map-e対応のルータが正式に出ていなかったのでこの対応も行った。

後の変化を解るようにするためここは少し踏み込む。この方法のポイントは、IPV6のセグメント(世界中で使えるIPとフレッツの中でのIPが統一されている)がプロバイダ(フレッツ?)から割り当てられているので、これをルータ越しに無理やりL2レベルで分割するのだ。ルータはntppdを使って、ProxyArpを確立し、WAN側のセグメントに端末が居るように見せてしまうのだ。反対もできるのだが、パケットの出口NICについての調整方法が解らない。個別にはできるのだが、汎用的にする方法が見つからなかった。それによりL3ルータなのに両脇はIPセグメントが同じにできるので1セグメントで運用できる。かつ、L3のFWの技術が使えるというものだ。ただ問題もあった。上記のパケットの出口NICの選び方の指定がトリッキーなのだ。起動した後ルーティングコマンドを打ち込む。そのため、なにかきっかけがあると消えてしまう。また、メールサーバなど、外に公開するIPの動作確認を中からできない。現状は外部からIPV6でアクセスする方法が無いので動作確認する方法がない。携帯のキャリアは未だにIPV6に対応していない。機器はWifiだとIPV6使えるんだがFreeFifi試してなかったな。で、こまって その5に進むことになった。

参考資料

PPPoEなのだがが内容が細かく書かれていた。

CentOS7 を IPv4(PPPoE) + IPv6(IPoE) のルーターにする
更新履歴 2022/11/25 ndppdのパッケージさらに追加。一部修正 2021/10/23 CentOS8向けndppdのパッケージ追加 2020/6/18 2.4 ndppd の修正と 2.5 firewalld の追加。CentO

方法はしっかり書いてあるのだが、再現できなかったり、説明不足がある。

設定方法

netplanとsysctlの設定

netplanは今ひとつすべてをコントロールできないらしい。いろいろ試行錯誤したが、よくわからないので、解っているものだけあとで書く。NetworkManagerは入れていない。

netplanの記載(QEMU/KVMの環境があるのでブリッジを使っている)

network:
  ethernets:
    eno1:            # 内部の物理  
      dhcp4: false
      dhcp6: false
    eno2:            # WANの物理
      dhcp4: false
      dhcp6: false
  bridges:
    br0:
      interfaces: [eno1]
      parameters:
        stp: false
      dhcp4: false
      dhcp6: false
      accept-ra: false
      addresses:
      - 192.168.1.21/24
      nameservers:
        addresses: [172.0.0.1]
        search:
        - greet.jp
    br1:
      interfaces: [eno2]
      parameters:
        stp: false
      dhcp4: false
      dhcp6: false
      accept-ra: true
      addresses:
      - "aaaa:bbbb:cccc:dddd:eeee:ffff:0:1/64"  #  MAP-e用 アドレス
  tunnels:
    ip6tnl1:
      mode: ipip6
      remote: xxxx:yyyy:zzzz::g
      local: aaaa:bbbb:cccc:dddd:eeee:ffff:0:1
      mtu: 1460
      addresses:
        - 153.sss.ttt.u/32
      routes:
        - to: 0.0.0.0/0
          via: 153.sss.ttt.u
  version: 2

反映

netplan generate   #確認
netplan apply      #反映

前の設定が消えるとは限らないので、再起動することが望ましい。

sysctl.cnfの設定(MAP-eも含んでる)

net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.default.forwarding=1

反映

sysctl -p

radvdの導入と設定

apt install radvd

/etc/radvd.confの内容

interface br0 {
  AdvSendAdvert on;          # RAを送る
  #AdvManagedFlag on;        # Mフラグ
  AdvOtherConfigFlag on;    # Oフラグ
  MinRtrAdvInterval 30;      # UnsolicitedRA送信間隔の最小値 (ルーターから勝手に送り付けるRA)
  MaxRtrAdvInterval 100;     # UnsolicitedRA送信間隔の最大値
  #RDNSS 2001:aa:bb:cc::a 2001:aa:bb:cc::b {
  #      AdvRDNSSLifetime infinity;  #DNSサーバのアドレスキャッシュ自動削除を無効化
  #                                  #WindowsのDNSサーバが自動削除されるバグを抑制出来る
  #  };
  prefix aaaa:bbbb:cccc:dddd::/64 {             
    AdvOnLink on;            # リンクのOnOff状態の配布。正確な意味はよく分からず。
    AdvAutonomous on;        # ステートレスアドレス自動設定にこのプリフィックスを使う(MフラグonのDHCPv6だから不要?)
    AdvRouterAddr on;        # Router(raspi)のアドレスが配布される
  };
};

再起動と自動起動してい

systemctl restart radvd
systemctl enable radvd

IPアドレスが変わったときのために、prefixを自動で取得できると参考資料にあるのだがよく解っていない。そもそもどこからとってくるんだろう。WANと同じだが。また内部の自身のIPはどのように自動になるかがわからない。

ndppdの導入と設定

apt install ndppd

/etc/ndppd.confの設定

route-ttl 30000

proxy br1 {
  router no
  autowire yes
  keepalive yes
  retries 3
 rule ::/0 {
   iface br0
 }
}

proxy br0 {
   router yes
   timeout 500
   ttl 30000
   autowire yes
   keepalive yes
   retries 3
   rule ::/0 {
      auto
   }
}

再起動と自動起動指定

systemctl restart ndppd
systemctl enable ndppd

ルーティングのコマンド発行

下記を radvd ndppd webmin-ip6tables(webminのFW自動起動)に入れる。どれか一つでもいいのだがいろいろ都合がある。設定が外れたときはradvdの再起動。 起動時はwebmin-ip6tablesが良いみたい。

対象ファイル

/run/systemd/generator.late/ndppd.service
/lib/systemd/system/radvd.service
/lib/systemd/system/webmin-ip6tables.service

入れる内容

ExecStartPre=/sbin/ip -6 route replace aaaa:bbbb:cccc:dddd::/64 dev br0 metric 200

反映?

systemctl daemon-reload

再起動すると起動直前にコマンドが発行されルーティングが定義される。

::1 dev lo proto kernel metric 256 pref medium
aaaa:bbbb:cccc:dddd::/64 dev br0 proto kernel metric 200 pref medium
aaaa:bbbb:cccc:dddd::/64 dev br1 proto kernel metric 256 pref medium
aaaa:bbbb:cccc:dddd::/64 dev br1 proto ra metric 1024 expires 2591804sec pref medium
fe80::/64 dev br0 proto kernel metric 256 pref medium
fe80::/64 dev br1 proto kernel metric 256 pref medium
fe80::/64 dev ip6tnl1 proto kernel metric 256 pref medium
default via fe80::10ff:fe04:2057 dev br2 proto ra metric 1024 expires 1604sec pref medium

その5 ブリッジでSWにして、L2FWを使う

L3レベルで同じものをL2で無理に分割するので無理が来る。なので、ブリッジを使ってSWとして動作させ、iptablesでFWを実施する。L2なのにL3的なFWができるので、これでコントロールしようという作戦。だが、FWで管理しきれなかった。icmpv6の中に通したいもの通したくないものが混じっていて、一部はFWで指定できない。また、すべてがFWの管理にならないらしくて、制御できない。そもそも知らないプロトコルがいっぱいあって、何が通って何が通らないか把握できない。基本通らないが、必要なものを通すという設定ができないと無理。その結果、内部でプロバイダ(フレッツ)の設定が自動反映して、DNSの参照がコントロールできなかったり。ルーティングがコントロールできなくなった。mDNSを使えばよいという話もあるのだが、、、

参考資料

NICを二枚使用したブリッジ型ファイアウォール構築メモ : makoto_fujimotoのblog
iptablesのパケットフィルタリングを使用したブリッジ型の簡易ファイアウォールを構築した際のメモです。NICをブリッジ構成とすることでHUBとして機能しますので、ネットワークゾーンを分ける必要がなく、クライアントの設定変更も必要としないので導入が簡単です。【検証環
ex2.RaspberryPiを無線LANアクセスポイント化する - RaspberryPiで各種サーバー作り!
ここでは、hostapdとbridgeを用いて、linux(Debian)マシンを無線LANアクセスポイント化する方法を紹介しています。当サイトでは他にもサーバーの立て方などを紹介しています。

無線APもブリッジを使うのでFWの設定が参考になる。

設定方法

radvd ndppdは使いません。止めておくように。

netplan とsysctlの設定

netplanの設定

network:
  ethernets:
    eno1:            # 内部の物理  
      dhcp4: false
      dhcp6: false
    eno2:            # WANの物理
      dhcp4: false
      dhcp6: false
  bridges:
    br0:
      interfaces: [eno1,eno2]
      parameters:
        stp: false
      dhcp4: false
      dhcp6: false
      accept-ra: true
      addresses:
      - 192.168.1.21/24
      - "aaaa:bbbb:cccc:dddd:eeee:ffff:0:1/64"  #  MAP-e用 アドレス
      nameservers:
        addresses: [172.0.0.1]
        search:
        - greet.jp
  tunnels:
    ip6tnl1:
      mode: ipip6
      remote: xxxx:yyyy:zzzz::g
      local: aaaa:bbbb:cccc:dddd:eeee:ffff:0:1
      mtu: 1460
      addresses:
        - 153.sss.ttt.u/32
      routes:
        - to: 0.0.0.0/0
          via: 153.sss.ttt.u
  version: 2

sysctl.confの設定

net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.default.forwarding=1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-arptables = 1   #0のほうがFWのコントロールが反映しやすい場合も
net.ipv6.conf.br1.accept_ra = 2  # WAN側 RAを受け付ける
net.ipv6.conf.br0.accept_ra = 0
net.ipv6.conf.all.disable_ipv6 = 0         # IPv6有効化
net.ipv6.conf.default.disable_ipv6 = 0

sysctlには疑問がいっぱい。よくわからないまま。ipv6のforwardingがほんとにいるのか?nfは指定しないとiptablesに行かないのだが、3つの役割がよくわからない。AND ORどうなるの?FWとしての条件が有効になったりならなかったりよくわからないまま。その他、netplan(VerUPすると特に)でできるものらしきものもあるし、うまく設定しないとゴミができて困る。IPアドレスが余計についたり、ルーティングが余計についたり。

ip6tablesの設定

ここでは、設定できたとこだけ抜粋。要は通過したいものだけ書くのだが、、、細かく制御できなかった。icmpv6の中のraは制御できない。正確には、ルータアナウンスの中を制御したかった。ra無いとルータのアドレスがわからないし。あると余計なDNSがつくし。dhcpv6の通過を止めたつもりでも止まってるかよくわからないし。tcpdumpで見てると多すぎて解らない。プロトコルによってはtcpdumpでのフィルターのかけ方がわからないし。同じ条件をip6tablesに入れる方法もよくわからない。お手上げ。

nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
*filter
:OUTPUT ACCEPT [0:0]
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
# ICMPはOK
-A INPUT -p icmpv6 -j ACCEPT
# 内部はOK
-A INPUT -m physdev -j ACCEPT ! --physdev-in eno2
# すでに通信中はOK
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# DNSはOK
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
# 時計サーバは受け付ける
-A INPUT -p udp -m udp --dport 123 -j ACCEPT
# 時計サーバは受け付ける
-A INPUT -p tcp -m tcp --dport 123 -j ACCEPT
-A FORWARD -p icmpv6 -j ACCEPT
-A FORWARD -m physdev -s fe80::/16 --physdev-out eno2
# 内部からは無条件
-A FORWARD -m physdev -j ACCEPT ! --physdev-in eno2
-A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# 時計サーバは受け付ける
-A INPUT -p tcp -m tcp --dport 123 -j ACCEPT
# dhcpv6-clientの要求は通さない
-A OUTPUT -p udp -m udp --sport 546 -j DROP
COMMIT
*mangle
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT

その6 IPV6のプライベートアドレスを内部で使って 外にはNATする

最初っからIPV6のメリットを捨ててるようで納得できなかった。でも、これまでのノウハウであっさりと定義できた。あまり使われないNATの設定でよくわからない仕様に引っかかったが、、、。しかし、バカみたいなオチが。。。アプリケーションがIPV6を基本使わないのだ。強制で使うのようにしないとIPV6にならない。プライベートアドレス(リンクローカルでない)をグローバルに流さないための仕様なのだろうが、ブラウザもpingもIPV4に行ってしまう。普通はIPV6優先なのに。そもそも、怪しげなMap-eとかの使用頻度を減らしたいのでIPV6にこだわっていたのにこれでは意味がない。なので、その4に戻ることになった。いくつか改良が入るが。

参考資料

我が家のネットワークが不調すぎるのでRasberry PiでIPv6ルーターを自作した - Qiita
背景我が家のネットワークの調子が悪い。ミーティング中やゲーム中に突如回線落ちする。ひどいときは日に3回ほどネットが切断される。どうやら利用しているルーターの負荷が高まると勝手に再起動し、その間に…

設定方法

ここであまりにもメインPCをいじると影響が大きいので、Rasbery Pi 4を使うことにした。USBーNICをつけて、これをWAN向けにしている。無線APもしているので注意。

netplanの設定

network:
    ethernets:
        eth0:
            dhcp4: false
            dhcp6: false
            accept-ra: false
            optional: false
        wlan0:
            dhcp4: false
            dhcp6: false
            accept-ra: false
            optional: false
        eth1:
            dhcp4: false
            dhcp6: false
            optional: true
            addresses: 
              - "aaaa:bbbb:cccc:ddd:eeee:ffff:0:1/64"
            accept-ra: true
    bridges:
        br0:
            interfaces: [eth0]
            parameters:
                stp: false
            dhcp4: false
            addresses:
              - 192.168.1.32/24
              - fd00::1/64
            nameservers:
                addresses: [172.0.0.1]
                search: [greet.jp]
            gateway4: 192.168.1.31
            dhcp6: false
            accept-ra: true
            optional: false
    tunnels:
      ip6tnl1:
        mode: ipip6
        remote: zzzz:xxxx:yyyy::9
        local: aaaa:bbbb:cccc:dddd:eeee:ffff:0:1
        mtu: 1460
        addresses:
          - a.b.c.0/32
        routes:
          - to: 0.0.0.0/0
            via: a.b.c.0
    version: 2

sysctl.confの設定

net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1

radvd.confの設定

interface br0 {
  AdvSendAdvert on;          # RAを送る
  #AdvManagedFlag on;        # Mフラグ
  AdvOtherConfigFlag on;    # Oフラグ
  MinRtrAdvInterval 30;      # UnsolicitedRA送信間隔の最小値 (ルーターから勝手に送り付けるRA)
  MaxRtrAdvInterval 100;     # UnsolicitedRA送信間隔の最大値
  AdvDefaultPreference low;  #このルータの優先順位を落とす
  #RDNSS 2001:aa:bb:cc::a 2001:aa:bb:cc::b {
  #      AdvRDNSSLifetime infinity;  #DNSサーバのアドレスキャッシュ自動削除を無効化
  #                                  #WindowsのDNSサーバが自動削除されるバグを抑制出来る
  #  };
  prefix fd00::/64 {
    AdvOnLink on;            # リンクのOnOff状態の配布。正確な意味はよく分からず。
    AdvAutonomous on;        # ステートレスアドレス自動設定にこのプリフィックスを使う(MフラグonのDHCPv6だから不要?)
    AdvRouterAddr on;        # Router(raspi)のアドレスが配布される
  };
};

WANとLANに両方足の出ているPCはWANを優先するように仕向けてる。

ip6tablesの設定

*nat
:OUTPUT ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
#-A POSTROUTING -o eth1 -j MASQUERADE
-A POSTROUTING -o eth1 -j SNAT --to aaaa:bbbb:cccc:ddd:eeee:ffff:0:1
COMMIT
*filter
:OUTPUT ACCEPT [0:0]
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
# ICMPはOK
-A INPUT -p icmpv6 -j ACCEPT
# 内部はOK
-A INPUT -i br0 -j ACCEPT
# すでに通信中はOK
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# DNSはOK
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
# 時計サーバは受け付ける
-A INPUT -p udp -m udp --dport 123 -j ACCEPT
-A FORWARD -p icmpv6 -j ACCEPT
-A FORWARD -i br0 -j ACCEPT
-A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# 時計サーバは受け付ける
-A INPUT -p tcp -m tcp --dport 123 -j ACCEPT
COMMIT
*mangle
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT

最初はMASQUERADEで行こうと思ったのだが、どうも対象デバイスのIPアドレスが複数あるとうまく処理できない。でSNATで出口IPを指定する設定にした。そもそもRAをきっかけにして設定されるIPがつかないようにすればよいのだが、うまく行かなかった。

その7 改良版その4と妥協

その4 問題点の整理

以下のように整理し妥協することとした。

トリッキーなルーティング設定

何かの事象で消えるかもしれないことだが、netplanのレベルアップでnetplan内で優先順位(metric)が設定できるようになった。

外部接続の確認

いろいろ使っていて、なんとかなるかなという結論になった。いろいろあって、実用になるのはWEBぐらいという結論だ。メール系smtpはDNSの逆引きができないとセキュリティーに引っかかることがあるから不可。imapはそもそも移動端末でIPV6を使用できるものがない。WEBは外部からの動きが解ったので、これで大丈夫と確認できるようになったので問題ない。

追加 vlanの使用

LANが煩雑になってきたのでVLANを使用することにした。少しいいいL2SWを買ってきたのだ。このSWの機能やzabbixでの情報収集で、1本でも十分収容できるデータ量であると解ったのだ。一本つなげておくと、論理的な設定だけで、いろいろ構成を変えるのは楽だ。NICを増やさなくてもいろいろ分割できる。WANはそれ用のSWで分岐していたが、使用容量が増えるまではまとめてしまって1本のLANケーブルで接続し、中で分けることにした。

副次的なことだが、「そんなものかな」 というものを見つけた。1本のLANでベースをLAN、VLANをWANにし両方にIPV6のアドレスをMACアドレスベースで振らせる。すると同じIPが付くのだ。今のところ問題は出ていないが、ndppdあたりで問題が出るかもしれない。

設定方法

netplanの設定

network:
    ethernets:
        eth0:
            dhcp4: no
            dhcp6: false
            optional: false
            accept-ra: false
        wlan0:
            dhcp4: no
            dhcp6: false
            optional: false
            accept-ra: false
    vlans:
        vlan2:
            id: 2
            link: eth0
            dhcp4: false
            dhcp6: false
            optional: false
            addresses:
              - "aaaa:bbbb:cccc:ddd:eeee:ffff:0:1/64"
            accept-ra: true
        vlan3:
            id: 3
            link: eth0
            dhcp4: false
            dhcp6: false
            optional: false
            accept-ra: false
            addresses: [192.168.3.31/24]

    bridges:
        br0:
            interfaces: [eth0]
            parameters:
                stp: false
            dhcp4: no
            addresses:
              - 192.168.1.31/24
              - aaaa:bbbb:cccc:ddd::31/64
            routes:
              - to: "aaaa:bbbb:cccc:ddd::31/64"
                scope: link
                metric: 199
            nameservers:
                addresses: [172.0.0.1]
                search: [greet.jp]
            dhcp6: no
            accept-ra: false
            optional: false
    tunnels:
      ip6tnl1:
        mode: ipip6
        remote: xxxx:yyyy:zzzz::g
        local: aaaa:bbbb:cccc:ddd:eeee:ffff:0:1
        mtu: 1460
        routes:
          - to: 0.0.0.0/0
            scope: link
    version: 2

確認不足なのだが、ipv6をつけない物理NICはあえて記載して何もつけない設定を入れないと、余計なものがついて誤動作することがある。sysctl.confに記載する方法もあるが、こちらにまとめるべきだろう。

sysctl.confの設定

#net.ipv4.conf.default.rp_filter=1
#net.ipv4.conf.all.rp_filter=1
net.ipv4.ip_forward=1
net.ipv6.conf.br0.accept_ra = 0
net.ipv6.conf.vlan2.accept_ra = 0
net.ipv6.conf.vlan3.accept_ra = 0
net.ipv6.conf.wlan0.accept_ra = 0
net.ipv6.conf.all.forwarding=1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
#net.bridge.bridge-nf-call-arptables = 0
#net.core.fb_tunnels_only_for_init_net = 2

まだ未確認なものなどがコメントで入れてある。nf系はブリッジのルーティング制御をするかもしれないので入れてある。

radvd.confの設定

interface br0 {
  AdvSendAdvert on;          # RAを送る
  #AdvManagedFlag on;        # Mフラグ
  AdvOtherConfigFlag on;    # Oフラグ
  MinRtrAdvInterval 30;      # UnsolicitedRA送信間隔の最小値 (ルーターから勝手に送り付けるRA)
  MaxRtrAdvInterval 100;     # UnsolicitedRA送信間隔の最大値
  AdvDefaultPreference low;  #ルータの優先順位を下げる
  RDNSS aaaa:bbbb:cccc:dddd::31 {
  #      AdvRDNSSLifetime infinity;  #DNSサーバのアドレスキャッシュ自動削除を無効化
  };
  prefix aaaa:bbbb:cccc:dddd::/64 {
    AdvOnLink on;            # リンクのOnOff状態の配布。正確な意味はよく分からず。
    AdvAutonomous on;        # ステートレスアドレス自動設定にこのプリフィックスを使う(MフラグonのDHCPv6だから不要?)
    AdvRouterAddr on;        # Router(raspi)のアドレスが配布される
  };
};

ndppd.confの設定

route-ttl 30000

proxy vlan2 {
  router yes
  #router no
  autowire yes
  keepalive yes
  retries 3
  rule ::/0 {
    iface br0
    autovia yes
  }
}

proxy br0 {
   router yes
   timeout 500
   ttl 30000
   autowire yes
   keepalive yes
   retries 3

   rule ::/0 {
      iface vlan2
      autovia yes
   }
}

ルーティングの問題で逆方向には効果ないので消すことにした。もしかするとWiFiがプチプチ着れる原因かもしれないからでもある。tcpdumpで見てると大量のudpパケットが外からWiFiに流れると、何かがパンクするらしく、端末がWiFiを切ってしまうみたい。処理を軽くすることと、タイマーが切らたときに行き先がわからなくなるのではないかと考えたわけだ。

最後に

しばらくこの設定で使ってみて不具合を出していこうと思う。また目移りして、一巡しないようにしなければ。。。これに関連して、bind9 dhcpv4 MAP-e pppoe の設定もしているので、別途記録として書いておきたい。

なお、tcpdumpを使いまわしたので、そのあたりも記録したい。特に/etc/ethersにMACアドレスのテーブルを作って確認したことは書いておきたい。なおこれをLDAPなどに入れて複数サーバで共用する方法もあるようだ。場合によっては研究しなければならないだろう。

他に記載する予定。ldap glusterfs autofs lvmraid sas/s-ata apatch dovcot postfix amavis-new sppamassasin

コメント

タイトルとURLをコピーしました