LINUX.ORG.RU
решено ФорумAdmin

systemd и ip_forward

 , ,


0

2

Начиная, с какой-то версии 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 вручную.

★★★★★

Последнее исправление: cetjs2 (всего исправлений: 1)

Я не особо компетентен в том, как работают сети, но форвардинг ответов, наверное, тоже нужен (и, соответственно, IPForward=kernel в network-файле для eth0).

intelfx ★★★★★
()

Вааще-то в линухе IP-форвардинг всю жизнь настраивался индивидуально для каждого интерфейса *И* версии протокола, что никогда не мешало админам локалхостов включать его глобально.

А теперь пришёл скотина-Поттеринг и всё сломал.

Macil ★★★★★
()
Ответ на: комментарий от Macil

Кстати, зачем включать форвардинг не глобально? Ведь что касается безопасности и фильтрации пакетов, есть iptables, в котором никто не заставляет делать iptables -P FORWARD ACCEPT, а можно разрешить форвардинг лишь для конкретных IP и/или интерфейсов, притом куда более гибко.

KivApple ★★★★★
() автор топика
Последнее исправление: KivApple (всего исправлений: 1)
Ответ на: комментарий от KivApple

Кстати, зачем включать форвардинг не глобально?

Потому что интерфейс нужно сначала проинициализировать, присвоить адреса, настроить файрвол и маршрутизацию, а только потом включать форвардинг.

Понятно дело, операции эти нихрена не атомарные, а закон подлости постулирует, что процесс обязательно застрянет где-то посередине.

Поттеринг вообще и Редхат в частности уже достаточно давно мыслят несколько другими категориями. Для них тысячи динамически создаваемых интерфейсов — данность и нормальные условия работы.

И да. Гибкость, конечно же, и поддержка различных сценариев работы. Отсутствие этого не вечная ли претензия к M$? :)

Опять же, в линуксе такой подход изначально ;) Так что все вопросы к Линусу.

Macil ★★★★★
()
Ответ на: комментарий от Macil

Вааще-то в линухе IP-форвардинг всю жизнь настраивался индивидуально для каждого интерфейса *И* версии протокола, что никогда не мешало админам локалхостов включать его глобально.

Ви так говоrите, как будто это что-то плохое. Ну при условии, что iptables режет ненужный форвардинг.

te111011010
()
Ответ на: комментарий от Macil

Потому что интерфейс нужно сначала проинициализировать, присвоить адреса, настроить файрвол и маршрутизацию, а только потом включать форвардинг.

Ты не пояснил почему ты считаешь что нужно делать именно так.

anonymous
()
Ответ на: комментарий от anonymous

Очевидно же: если у нас будет форвардинг ДО, например, применения правил фаерволла, то может уйти инфа, которая не должна уйти.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.