2017年10月8日日曜日

iptables の設定を systemd で読み込む

以前,以下のようなエントリーを記したが,

WM×LI: Raspberry Pi をルーター&無線LANルーター化する

起動時の設定を cron の @reboot で読み込むのは,最終手段なので(というかダサいので),systemd を使用して iptables の設定を読み込むように修正する.

まず,今回設定したいiptablesの設定は以下の通りだ.

iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.200.0/24 -j MASQUERADE

iptables 設定の保存/再設定には,iptables-save コマンドと iptables-restore コマンドを使用する.

# iptables-save | tee /etc/iptables.settings
# Generated by iptables-save v1.6.0 on Sun Oct  8 01:22:26 2017
*nat
:PREROUTING ACCEPT [794:109487]
:INPUT ACCEPT [183:35338]
:OUTPUT ACCEPT [38:2648]
:POSTROUTING ACCEPT [36:2369]
-A POSTROUTING -s 192.168.100.0/24 -j MASQUERADE
-A POSTROUTING -s 192.168.200.0/24 -j MASQUERADE
COMMIT
# Completed on Sun Oct  8 01:22:26 2017

保存した設定を読み込む場合は,以下のようにしてやる.

# iptables-restore /etc/iptables.settings

このコマンドを起動時に自動で実行するための systemd で設定ファイルを作成する.

$ vim iptables-mysettings-restore.service
[Unit]
Description=IP Tables Settings Restore
Before=isc-dhcp-server.service
After=network.target remote-fs.target nss-lookup.target

[Service]
ExecStart=/sbin/iptables-restore /etc/iptables.settings 
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target

そして,systemd 用のディレクトリに移動し,有効にしてやる.

# mv iptables-mysettings-restore.service /etc/systemd/system/
# systemctl status iptables-mysettings-restore.service
● iptables-mysettings-restore.service - IP Tables Settings Restore
   Loaded: loaded (/etc/systemd/system/iptables-mysettings-restore.service; disabled; 
vendor preset: enabled)
   Active: inactive (dead)
# systemctl enable iptables-mysettings-restore.service
Created symlink /etc/systemd/system/multi-user.target.wants/iptables-mysettings-resto
re.service → /etc/systemd/system/iptables-mysettings-restore.service.
# systemctl is-enabled iptables-mysettings-restore.service
enabled

これで再起動してやれば,cron@rebootを使わずに自動起動できる.

0 件のコメント:

コメントを投稿