Назад | Перейти на главную страницу

Как правильно постоянно включать переадресацию IP в Linux с помощью systemd?

Я пытаюсь включить переадресацию IP (между enp0s3 и tun0 интерфейсы) и напишите net.ipv4.ip_forward = 1 в /etc/sysctl.conf. После перезагрузки у меня

$ cat /proc/sys/net/ipv4/ip_forward
1

Но пересылка по-прежнему не работает. Я пытаюсь добавить net.ipv4.conf.default.forwarding=1 в /etc/sysctl.conf. Теперь после перезагрузки у меня

$ cat /proc/sys/net/ipv4/ip_forward
1
$ cat /proc/sys/net/ipv4/conf/default/forwarding
1
$ cat /proc/sys/net/ipv4/conf/all/forwarding
1
$ cat /proc/sys/net/ipv4/conf/enp0s3/forwarding
0
$ cat /proc/sys/net/ipv4/conf/tun0/forwarding
0

Я не могу включить /proc/sys/net/ipv4/conf/enp0s3/forwarding и /proc/sys/net/ipv4/conf/tun0/forwarding в sysctl.conf потому что эти файлы не существуют во время такой ранней загрузки:

systemd-sysctl[85]: Couldn't write '1' to 'net/ipv4/conf/enp0s3/forwarding', ignoring: No such file or directory
systemd-sysctl[85]: Couldn't write '1' to 'net/ipv4/conf/tun0/forwarding', ignoring: No such file or directory)

, более того tun0 динамический интерфейс (можно добавлять и удалять в любой момент).

Если я вручную включу пересылку для enp0s3 и tun0 тогда пересылка работает как положено.

Итак, как правильно включить переадресацию для интерфейсов?

PS: Gentoo с ядром 4.1.15 и systemd 226

PPS: если мне не изменяет память net.ipv4.ip_forward = 1 было достаточно.

Я наконец решил проблему. Я использую systemd (с networkd), и в systemd-221 появилась новая функция переадресации IP: "IPForwarding =" - см. https://github.com/systemd/systemd/blob/a2088fd025deb90839c909829e27eece40f7fce4/NEWS

Из man systemd.network:

[NETWORK] ОПЦИИ РАЗДЕЛА

...

IPForward =

Настраивает переадресацию IP для сетевого интерфейса. Если включено, входящие пакеты на сетевом интерфейсе будут пересылаться на другие интерфейсы в соответствии с таблицей маршрутизации. Принимает либо логический аргумент, либо значения «ipv4» или «ipv6», которые разрешают пересылку IP только для указанного семейства адресов, или «ядро», которое сохраняет существующие настройки sysctl. Это контролирует параметры sysctl net.ipv4.conf..forwarding и net.ipv6.conf..forwarding сетевого интерфейса (подробности о параметрах sysctl см. В ip-sysctl.txt [1]). По умолчанию "нет".

Примечание: если этот параметр не включен или не установлен на «ядро», пересылка IP-адресов на этом интерфейсе не выполняется, даже если это глобально включено в ядре с помощью net.ipv4.ip_forward, net.ipv4.conf. Параметры sysctl all.forwarding и net.ipv6.conf.all.forwarding.

Итак, теперь я использую сетевой файл, как показано ниже, чтобы включить переадресацию IP (для каждого интерфейса):

# cat /etc/systemd/network/tun0.network
[Match]
Name=tun0

[Network]
IPForward=ipv4