Я пытаюсь включить переадресацию 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