IPv6ではブリッジとしてIPv4ではルータとして機能するブルータをLinuxで構築する設定メモです。残念ながら現行のLinuxディストリビューションでは複雑な設定を必要とします。
ターゲットマシンは昨年に購入したLiva-Z
OSはCentOS7.4
IPv4ルータの設定については説明省略します。
1. firewalldの停止
CentOS7はfirewalldでフィルタリング管理をしていますが、従来のiptablesの方が慣れている/細かいところまで設定できるのでfirewalldを止めます。
$ sudo systemctl stop firewalld
$ sudo systemctl disable firewalld
|
2. 必要なモジュールの導入と開始
$ sudo yum install iptables-services iptables-utils ebtables bridge-utils
$ sudo systemctl start iptables
$ sudo systemctl enable iptables
$ sudo systemctl start ip6tables
$ sudo systemctl enable ip6tables
$ sudo systemctl start ebtables
$ sudo systemctl enable ebtables
|
ip6tablesはIPv6版のiptablesです。
ebtablesはブリッジ用のフィルタ設定で書式はほぼiptablesと同じです。
3. 必要なドライバの導入と開始
ブリッジデバイスでフィルタリング機能を利用(ebtablesの使用)するために必要なデバイスドライバを導入します。
以下の内容の/etc/modules-load.d/br_netfilter.confを作成する
#load br_netfilter.ko at boot
br_netfilter
|
ドライバの開始を指示する。
$ sudo systemctl restart systemd-modules-load.service
|
4. カーネルパラメータの設定
以下の行を/etc/sysctl.confに追加する (net.ipv4.ip_forward は IPv4ルーティングのため)。
net.ipv4.ip_forward = 1
net.ipv6.conf.all.accept_redirects = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-arptables = 1
|
カーネルパラメータを設定する
5. ブリッジネットワークデバイスの登録
前提: イーサネットデバイスは enp1s0 と enp3s0 の2つが存在し、IPv4ルータとして設定済みとする
$ sudo nmcli connection add type bridge ifname br0 stp no
|
このbridge-br0にenp1s0と同等の設定とIPv6の設定をしてください。
(例)
$ sudo nmcli connection modify bridge-br0 ipv6.method auto
|
フリッジデバイスが活性化されるとenp1s0デバイスとenp3s0デバイスはネットワークデバイスとして機能しなくなります。
br0のイーサMACアドレスはenp1s0とbr0は同じ番号がアサインされ、br0に対して行った設定は実質enp1s0への設定と同じことになります。
また完全なブリッジとして動作している間はenp3s0デバイにネットワークノードとしての設定をすることはできません。
6. ブルータ設定
ebtablesにより、IPv6パケットはブリッジ処理、その他はルータ処理するよう指定します。
これにより初めてブルータとして機能するようになります。
$ sudo ebtables -t broute -F
$ sudo ebtables -t broute -P BROUTING DROP
$ sudo ebtables -t broute -A BROUTING -p IPv6 -j ACCEPT
$ sudo ebtables -t broute -A BROUTING -d BGA -j ACCEPT
$ sudo /usr/libexec/ebtables save
|
ebtablesの設定を確認するには以下のコマンドを入力してください。
$ sudo ebtables -t broute -L
|
7. ブルータ起動
/etc/sysconfig/network-scriptsのifcfg-enp1s0 と ifcfg-enp3s0の2ファイルそれぞれに次の1行を追加します。
これによりブリッジ接続する設定となります。
次にenp3s0デバイにネットワークノードとしての設定をするため、/etc/init.d/networkスクリプトをハックします。以下の行頭に+がついている行を追加します。
150 # IPv6 hook (post IPv4 start)
151 if [ -x /etc/sysconfig/network-scripts/init.ipv6-global ]; then
152 /etc/sysconfig/network-scripts/init.ipv6-global start post
153 fi
+154 # HACK for IPv4 Router / IPv6 Pass through bridge
+155 if [ -x /etc/sysconfig/network-scripts/init.passthru-brouter ]; then
+156 /etc/sysconfig/network-scripts/init.passthru-brouter start
+157 fi
158 # Run this again to catch any interface-specific actions
159 apply_sysctl
|
これにより、すべてのネットワーク設定をした最後に、/etc/sysconfig/network-scripts/init.passthru-brouterスクリプトが実行されるようになります。ここにenp3s0の設定スクリプトをいれることで設定できるようになります。
最後に、以下のコマンドで今まで設定したネットワークを起動します。
$ sudo systemctl daemon-reload
$ sudo systemctl restart network
|
brctl showコマンドでブリッジ状態を確認してください。以下のようになっていれば成功です。
$ brctl show
bridge name bridge id STP enabled interfaces
br0 8000.f44d30add092 no enp1s0
enp3s0
|