でかいの日記帳

2018/1/2 Tuesday

Linuxブルータ 設定メモ

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

カーネルパラメータを設定する

$ sudo sysctl -p

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行を追加します。

BRIDGE=br0

これによりブリッジ接続する設定となります。
次に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

1件のコメント »

この投稿へのトラックバック URI
http://www.dekaino.net/blog/index.php/archives/2018/01/02/1390/trackback/

  1. おおっ、凄い参考に成る!
    静御前でなくamd64なLIVAなら普通にFreeBSDで良かったのでは?

    Comment by kaz - 2018/1/3 Wednesday @ 2:50

このコメントの RSS

Leave a Comment

改行や段落は自動で挿入されます
メールアドレスはブログ上には表示されません
利用可能な HTML タグ : <blockquote> <code> <em> <i> <strike> <strong>


← コメント投稿時にはチェック必須です ← ここに deka と半角で入力しないとコメントできません

21 queries. 1.631 seconds. Powered by WordPress ME
For questions or comments, please send mail to: webmaster@dekaino.net