最近,LinuxでVPNを利用する際のfirewalld設定に関する情報が少ないことから,独自に検証を行い設定方法をまとめました。特に,異なるネットワーク間で双方向に接続する構成のドキュメントが見当たらなかったため,以下に紹介します。
ネットワーク構成
以下の構成図で,LinuxサーバーをVPNゲートウェイとして複数ネットワークを接続します。
client(0.x)--rt(192.168.0.1)==grobal==rt(192.168.1.1)--client(1.x)
server(0.2)↑eth0 ↑server(1.2)
↑----------------------VPN-------------------------↑
192.168.2.1(eth1) 192.168.2.2
この構成で「双方向」に通信する場合には,VPN(OpenVPNなど)によって共通のネットワークエリアを形成し、server(0.2)側でfirewalldのゾーン設定を行う必要があります。
firewalld設定
VPN接続で別ネットワークを双方向に接続するため,server(0.2)側の設定では192.168.0.x
のネットワークと192.168.2.x
のネットワークを同じゾーンに設定します。例えば、ゾーンをinternal
に設定する場合は以下の手順を行います。
1.デフォルトゾーンをinternalに設定
firewall-cmd –set-default-zone=internal
2.マスカレードと転送を有効化
firewall-cmd –zone=internal –add-masquerade –permanent
firewall-cmd –zone=internal –add-forward –permanent
3.インターフェースをinternalゾーンに追加
firewall-cmd –permanent –zone=internal –add-interface=eth1
4.設定のリロード
firewall-cmd –reload
同じゾーンにしないと片方からの通信のみ可能となってしまうことから,ゾーンは必ず同一にする必要があるようです。
ダイレクトルールの注意点
検証の結果,ダイレクトルール(firewall-cmd --permanent --direct
)を用いると,予期しない挙動が生じ、通信が途絶えることがありました。確実な通信を目指す場合、ダイレクトルールの使用は避け,ゾーン設定を活用する方法をおすすめします。
この方法が皆様の環境構築の一助になれば幸いです。今後もこのような検証結果をもとに,最適な設定方法を紹介してまいります。