Ubuntu20已不再支持/etc/network/interfaces配置文件。依托于interfaces配置文件的pre-up/post-up hook脚本也不再支持。替代品Netplan目前也不支持前述的hook脚本。要想实现hook脚本的功能目前可使用networkd-dispatcher来达成。注意在networkd-dispatcher中hook的功能是异步的。详细信息可参考man networkd-dispatcher。
文章目录
一、ifupdown hook功能实现
- 使用networkd-dispatcher运行所有存在的ifup hooks
- 使用networkd-dispatcher运行所有存在的ifdown hooks
二、配置iptables的加载与保存hook脚本 - 在/etc/network/if-pre-up.d 下新建加载hook脚本
- 在/etc/network/if-post-down.d 下新建保存hook脚本
三、为systemd配置关机service来完成iptables的保存工作
networkd-dispatcher是一个应用服务,可以使用如下命令查看服务的运行状态:
1 | systemctl status networkd-dispatcher.service |
使用如下命令查看服务的日志
1 | journalctl -u networkd-dispatcher.service |
一、ifupdown hook功能实现
1. 使用networkd-dispatcher运行所有存在的ifup hooks
vim /etc/networkd-dispatcher/routable.d/50-ifup-hooks
1 2 3 4 5 6 | #!/bin/sh for d in up pre-up; do hookdir=/etc/network/if-${d}.d [ -e $hookdir ] && /bin/run-parts $hookdir done exit 0 |
加上执行权限
1 | 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
1 2 3 4 5 6 | #!/bin/sh for d in down post-down; do hookdir=/etc/network/if-${d}.d [ -e $hookdir ] && /bin/run-parts $hookdir done exit 0 |
加上执行权限
1 | 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
1 2 | #!/bin/sh iptables-restore < /etc/iptables/iptables.rules |
加上执行权限
1 | chmod +x /etc/network/if-up.d/load_iptables |
提示:如果开机以上脚本未执行,可以将load_iptables文件复制到if-pre-up.d再次尝试
2. 在/etc/network/if-post-down.d 下新建保存hook脚本
vim /etc/network/if-post-down.d/write_iptables
1 2 3 | #!/bin/sh mkdir -p /etc/iptables iptables-save > /etc/iptables/iptables.rules |
加上执行权限
1 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | [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
1 2 3 4 5 6 7 8 | # 加载配置 systemctl daemon-reload # 立即执行(start)/立即关闭(stop) systemctl start pre_shutdown.service # 开机启动(enable)/关闭开机启动(disable) systemctl enable pre_shutdown.service |
原文地址:https://blog.csdn.net/beeworkshop/article/details/113824193