ブート時にサーバPCのVMがlibvirtdによって起動された後、仮想networkのiptablesに余計な設定が入っている。
以下のようREJECT削除したい。
/sbin/iptables -D FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable
/sbin/iptables -D FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
そこで、systemdにて上記を実行するserviceを以下のように作成(virbrforward.service)。
[Unit]
Description=run virbrforward when boot
After=libvirtd.service
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/virbrforward.sh
[Install]
WantedBy=multi-user.target
「/lib/systemd/system/」の下に上記virbrforward.serviceファイルを置いて、下記コマンドでenableにする。
$ sudo systemctl enable virbrforward
virbrforward.shがiptablesをいじるshell script。libvirtdサービスがActiveになった後に実行される。
しかし、libvirtdはActiveになってから、いろいろ処理が終るのに数秒(該当サーバPCでは約4秒)かかる。
なので、libvirtdサービス開始が完了してから確実にiptablesの処理を行なうようにvirbrforward.shの中に"sleep 10"を入れてやる。