Ubuntu20自动开机加载/关机保存iptables配置

Ubuntu20已不再支持/etc/network/interfaces配置文件。依托于interfaces配置文件的pre-up/post-up hook脚本也不再支持。替代品Netplan目前也不支持前述的hook脚本。要想实现hook脚本的功能目前可使用networkd-dispatcher来达成。注意在networkd-dispatcher中hook的功能是异步的。详细信息可参考man networkd-dispatcher。


networkd-dispatcher是一个应用服务,可以使用如下命令查看服务的运行状态:

systemctl status networkd-dispatcher.service

使用如下命令查看服务的日志

journalctl -u networkd-dispatcher.service

一、ifupdown hook功能实现

1. 使用networkd-dispatcher运行所有存在的ifup hooks

vim /etc/networkd-dispatcher/routable.d/50-ifup-hooks

#!/bin/sh
for d in up pre-up; do
    hookdir=/etc/network/if-${d}.d
    [ -e $hookdir ] && /bin/run-parts $hookdir
done
exit 0

加上执行权限

chmod +x /etc/networkd-dispatcher/routable.d/50-ifup-hooks

networkd-dispatcher将遍历/etc/network/if-up.d 和 /etc/network/if-pre-up.d 目录,执行上述目录下的所有脚本。

2. 使用networkd-dispatcher运行所有存在的ifdown hooks

vim /etc/networkd-dispatcher/off.d/50-ifdown-hooks

#!/bin/sh
for d in down post-down; do
    hookdir=/etc/network/if-${d}.d
    [ -e $hookdir ] && /bin/run-parts $hookdir
done
exit 0

加上执行权限

chmod +x /etc/networkd-dispatcher/off.d/50-ifdown-hooks

networkd-dispatcher将遍历/etc/network/if-down.d 和 /etc/network/if-post-down.d 目录,执行上述目录下的所有脚本。

二、配置iptables的加载与保存hook脚本

1. 在/etc/network/if-pre-up.d 下新建加载hook脚本

vim /etc/network/if-pre-up.d/load_iptables

#!/bin/sh
iptables-restore < /etc/iptables/iptables.rules

加上执行权限

chmod +x /etc/network/if-pre-up.d/load_iptables
2. 在/etc/network/if-post-down.d 下新建保存hook脚本

vim /etc/network/if-post-down.d/write_iptables

#!/bin/sh
mkdir -p /etc/iptables
iptables-save > /etc/iptables/iptables.rules

加上执行权限

chmod +x /etc/network/if-post-down.d/write_iptables

注意:/etc/network/if-post-down.d/save_iptables可能会因为异步原因而无法执行。
所以,保存iptables的工作最好使用如下方式完成(或在更新配置后手动完成)。

三、为systemd配置关机service来完成iptables的保存工作

vim /lib/systemd/system/pre_shutdown.service

[Unit]
Description=Run commands when shutdown
Requires=network.target
DefaultDependencies=no
Conflicts=reboot.target
Before=shutdown.target

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/bin/bash /etc/network/if-post-down.d/write_iptables

[Install]
WantedBy=multi-user.target

上边的配置可以举一反三。

安装启动service

systemctl daemon-reload
systemctl start pre_shutdown.service
systemctl enable pre_shutdown.service
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值