Ubuntu 16.04でKVM仮想マシンからブリッジを通る通信のNetfilterをオフにする設定

Ubuntu

全部Ubuntuマニュアルのsysctl.dディレクトリについてのページで書いてあることそのままだけど、sysctl.dの設定方法の一例として説明されているので気づくのに時間かかった。
試してはいませんが、マニュアルを見る限りubuntu 12.04以降で有効な設定みたい。

設定方法


以下2つの内容の設定ファイルを作成する。

/etc/udev/rules.d/99-bridge.rules

ACTION=="add", SUBSYSTEM=="module", KERNEL=="br_netfilter", \
RUN+="/lib/systemd/systemd-sysctl --prefix=/net/bridge"

/etc/sysctl.d/bridge.conf

net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0

これでbr_netfilterモジュールが読み込まれたときにbridge.confの設定が適用されます。
設定を有効にするには再起動が必要になるので注意が必要です。

こちらでは紹介しませんが、マニュアルにはモジュールの強制読み込みと一緒に設定を適用する方法も書いてあります。

上記設定にたどり着いた理由とか


Netfilterをオフにしない場合どう見えるか

意識して制御していなければ、おそらく以下の図のようになります。

仮想ブリッジ上でtcpdumpを取ると、仮想マシン/端末の双方から送ったパケットが見えますが、その先には届きません。

/etc/sysctl.confまたは/etc/ufw/sysctl.confに設定を記述する方法

以下のファイルに設定を入れる方法も試しましたが、起動時に設定適用されなかった。

  • /etc/sysctl.conf
  • /etc/ufw/sysctl.conf

ついでに書くと、/etc/sysctl.d/以下にただ設定ファイルを作るだけというのもうまくいかなかった。

/etc/sysctl.confに設定を入れて起動時にsysctl -pする方法

inidやsystemctldで[sysctl -p]を実行するようにしても以下のエラーが出て適用できなかった。
このため、モジュールの読み込みタイミングより前に設定適用してしまっていると推測している。

Apr 23 00:12:29 server systemd-sysctl[397]: Couldn’t write ‘0’ to ‘net/bridge/bridge-nf-call-iptables’, ignoring: No such file or directory

コメント