Начиная, с какой-то версии systemd-network начал рулить перенаправлением трафика на интерфейсах и net.ipv4.ip_forward теперь может не сработать.
Итак, имеется хост на ArchLinux. Он должен раздать интернет через OpenVPN, сервер которого на нём запущен. А сами интернеты приходят через eth0. iptables настроен правильно.
Если выполнить команду
sysctl net.ipv4.ip_forward=1
то всё отлично работает. Однако стоит прописать это в файлик в каталоге /etc/sysctl.d, чтобы опция автоматически применялась при загрузке системы, то ничего не работает, хотя опция и выставляется.
Как правильно настроить systemd-network, чтобы перенаправление трафика заработало для интерфейса tun0?
# for file in /etc/systemd/network/*; do echo "$file:"; cat $file; done
/etc/systemd/network/en.network:
[Match]
Name=en*
[Network]
DHCP=yes
/etc/systemd/network/eth0.network:
[Match]
Name=eth0
[Network]
DHCP=yes
/etc/systemd/network/tun0.network:
[Match]
Name=tun0
[Network]
IPForward=kernel
# cat /etc/sysctl.d/30-ipforward.conf
net.ipv4.ip_forward=1
net.ipv6.conf.default.forwarding=1
net.ipv6.conf.all.forwarding=1
Такой набор настроек не помогает - раздача интернета не работает. Чтобы она заработала надо сделать sysctl net.ipv4.ip_forward=0 && sysctl net.ipv4.ip_forward=1 вручную.