我正在根据 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