ubuntu 22.04 netplan添加钩子 启动网卡时自动添加iptables预设规则

ubuntu 22.04 netplan添加钩子 启动网卡时自动添加iptables预设规则

ubuntu 22.04 netplan添加钩子 启动网卡时自动添加iptables预设规则

在日常的运维工作中,有时会需要在网卡启动或者重启时执行某些hook来实现特定的需求,例如ubuntu 16.04中可以在/etc/network/interfaces中添加pre-up iptables-restore < /etc/iptables/rules.v4来实现重启网卡时自动加载一些预设的iptables规则。
但从ubuntu 18.04 LTS开始,ubuntu使用了全新的netplan来管理网络配置,之前通过pre-up参数来调用hook脚本的操作就不再适用了。

1. netplan简单说明

在系统启动的早期阶段,netplan的“network renderer”运行,读取 /{lib,etc,run}/netplan/*.yaml 并将配置写入 /run 以将设备控制权移交给指定的网络守护进程。目前支持的网络管理工具有systemd-networkdNetworkManager。下面以Ubuntu 22.04 LTS为例,进行说明。通过配置/etc/netplan/00-installer-config.yaml文件中以如下格式进行显式指定选择使用哪个网络管理工具。systemd-networkd是系统默认配置,如果没有显式指定renderer的值,则默认交由systemd-networkd处理。

  • systemd-networkd
network:
  version: 2
  renderer: networkd
  • NetworkManager
network:
  version: 2
  renderer: NetworkManager

如果选择NetworkManager请先执行sudo dpkg -l | grep "network-manager"检查NetworkManager软件包是否安装到了系统中,如果没有,需要手动安装:

$ sudo apt update
$ sudo apt install network-manager

请注意systemd-networkd是包含在systemd软件包中的,默认已经安装。
ifupdown 的用户可能更熟悉在网络接口的配置文件中使用钩子脚本(例如 pre-up、post-up 等),但Netplan目前在其配置定义中不支持hook脚本,而是需要通过networkd-dispatcher软件包实现。如果networkd-dispatcher还没有安装到系统中,则通过下边命令安装:

$ sudo apt update
$ sudo apt install networkd-dispatcher

2. 配置hook脚本

下表是分别是ifupdown、networkd-dispatcher、networkmanager在不同网络状态对hook脚本的支持情况:

HOOKIFUPDOWNNETWORKD-DISPATCHERNETWORKMANAGER
pre-uif-pre-up.dpre-up
configuringconfiguring.d
configuredconfigured.d
upif-up.droutable.dup
post-upif-post-up.droutable.d
degradeddegraded.d
pre-downif-pre-down.dpre-down
downif-down.doff.ddown
post-downif-post-down.doff.d
no-carriernocarrier.d

以下是使用networkd-dispatcher通过安装在/etc/networkd-dispatcher/routeable.d/50-ifup-hooks中的脚本运行现有ifup钩子的示例:

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

同样,这是安装在/etc/networkd-dispatcher/off.d/50-ifdown-hooks中的ifdown挂钩的示例:

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

需要确保hook脚本/etc/networkd-dispatcher/routeable.d/50-ifup-hooks/etc/networkd-dispatcher/off.d/50-ifdown-hooks有执行的权限。

下边就可以创建自己的hook脚本来执行需要的操作:

$ sudo cat /etc/network/if-up.d/iptables-restore
#!/bin/bash

iptables-restore < /etc/iptables/rules.v4
$ sudo chmod +x /etc/network/if-up.d/iptables-restore

注意

  • 新创建的hook脚本也需要赋予执行权限
  • 新创建的hook脚本文件名如果以.sh结尾,并不能被/bin/run-parts命令所识别。

可以通过执行如果命令测试:

$ /bin/run-parts /etc/network/if-up.d/ --test
/etc/network/if-up.d//iptables-restore

如果执行后,返回了要执行的hook脚本,说明可以成功调用到hook脚本,反之则需要再修改。

如果按照以上步骤操作没有成功可以留言或者点击链接自行查看官方文档:

  1. netplan reference
  2. Use pre-up, post-up, etc. hook scripts
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值