如何使用 netplan 执行与使用 iptables 相同的操作?

如何使用 netplan 执行与使用 iptables 相同的操作?

我正在根据 14.04 的说明使用 18.04 设置新服务器。我已完成以下步骤:

/sbin/iptables -A FORWARD -p tcp --destination-port 80 -j ACCEPT
/sbin/iptables -t nat -A PREROUTING -j REDIRECT -p tcp --destination-port 80 --to-ports 8080
/sbin/iptables-save
# To save permanently (reset-persistent):
sudo sh -c "iptables-save > /etc/iptables.rules"
# Modify in /etc/network/interfaces
# Add this line:
    pre-up iptables-restore < /etc/iptables.rules    
# As below:

# The loopback network interface
auto lo
iface lo inet loopback
    pre-up iptables-restore < /etc/iptables.rules

# The primary network interface
auto eth0 eth1
iface eth0 inet static
        address XXX.XXX.XX.XXX
        netmask 255.255.255.0
        gateway XXX.XXX.XX.1
        dns-nameservers 8.8.4.4 8.8.8.8 XXX.XXX.0.3
iface eth1 inet static
        address XX.XXX.67.47
        netmask 255.255.0.0

但事实证明 18.04 的做法有所不同,它使用了一种叫做 netplan 的东西。

我发现了与如何恢复到 14.04 中的操作方式相关的问题和答案,但我想知道以新的方式做同样的事情是否更好。

我怎样才能使用 netplan 以旧方式完成工作?

答案1

Netplan 不支持钩子脚本:

https://netplan.io/faq#use-pre-up-post-up-etc-hook-scripts

解决方法是使用 networkd-dispatcher。上面的常见问题解答提供了有关如何操作的示例。

以下是使用 networkd-dispatcher 通过安装在 /etc/networkd-dispatcher/routable.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

相关内容