Интернет шлюз на базе Astra Linux

akelot

New member
Сообщения
6
#1
Решил немного поизучать AL релиз Орел, и возникла проблема с расшариванием интернета. Тестовый стенд, в VirtualBox, есть две гостевых машины:
1. Windows 7 с одним сетевым интерфейсом - внутренняя сеть. В качестве шлюза по умолчанию стоит 192.168.1.1
1. Astra Linux, с двумя сетевыми адаптерами, первый eth0 - nat, второй eth1 - внутренняя сеть.
Конфигурация интерфейсов:
allow-hotplug eth0
iface eth0 inet dhcp

allow-hotplug eth1
iface eth1 inet static
address 192.168.1.1
netmask 255.255.255.0
broadcast 255.255.255.255
network 192.168.1.0
# также прописана ссылка на правила iptables
post-up iptables-restore < /etc/iptables.up.rules

В sysctl.conf прописано
net.ipv4.ip_forward=1

В правилах iptables прописано:
Код:
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [36:2142]
:POSTROUTING ACCEPT [36:2142]
-A POSTROUTING -s 192.168.1.0/24 -o eth1 -j MASQUERADE
COMMIT

Но в Windows 7 интернет все равно не появляется. Адрес 192.168.1.1 пингутся, а допустим 8.8.8.8 - нет. Что я упускаю? Уже голову сломал, в linux не профи.
 

oko

New member
Сообщения
1 257
#2
to akelot
Полный выхлоп iptables-save в студию! :)
Модуль экстрасенсорики подсказывает, что проблема может оказаться в:
  • не настроена поддержка сессий цепочки FORWARD - iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT;
  • цепочка FORWARD вообще по умолчанию блокирует трафик - iptables -P FORWARD DROP (а надо либо общий ACCEPT, либо отдельные правила с ACCEPT по хостам/подсетям);
  • что-то еще сделано не так, как надо (в таблицах filter и mangle, например).
Кстати, если не изменяют глаз и память, "маскарад" у вас прописан для внутреннего интерфейса, а надо бы для внешнего (eth0) с указанием подсети (хостов) источников - iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.0/24 -j MASQUERADE.
Из экзотики (если вышесказанное не помогло):
  • косяк в конфигах VirtualBox;
  • косяк в самой VirtualBox и ее работе на хостовой системе;
  • не раздается адрес на eth0 по dhcp при настройке "nat" в сетевом интерфейсе VirtualBox (а вдруг?).
 

akelot

New member
Сообщения
6
#3
Код:
# Generated by iptables-save v1.6.0 on Tue Sep 17 18:13:03 2019
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth1 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 0 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 3 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m state --state INVALID -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
-A INPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -m state --state INVALID -j DROP
-A FORWARD -i eth1 -o eth0 -j ACCEPT
-A FORWARD -i eth0 -o eth1 -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o eth1 -j ACCEPT
-A OUTPUT -o eth0 -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
COMMIT
# Completed on Tue Sep 17 18:13:03 2019
# Generated by iptables-save v1.6.0 on Tue Sep 17 18:13:03 2019
*mangle
:PREROUTING ACCEPT [1156:220784]
:INPUT ACCEPT [1156:220784]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1156:220570]
:POSTROUTING ACCEPT [1156:220570]
COMMIT
# Completed on Tue Sep 17 18:13:03 2019
# Generated by iptables-save v1.6.0 on Tue Sep 17 18:13:03 2019
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [36:2142]
:POSTROUTING ACCEPT [36:2142]
-A POSTROUTING -s 192.168.1.0/24 -o eth1 -j MASQUERADE
-A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
COMMIT
# Completed on Tue Sep 17 18:13:03 2019

не раздается адрес на eth0 по dhcp при настройке "nat" в сетевом интерфейсе VirtualBox (а вдруг?).
Это точно исключено, на астре есть доступ к интернету по интерфейсу eth0, и с винды при условии использования подключения к squid, но трансляции сетевых адресов добиться не получается... Может ли это быть связана с какими-то настройками безопасности во время утсановки ОС? Лично я ничего не выбирал, кроме автологина в систему.
 

Olej

New member
Сообщения
1 307
#4
1. Astra Linux, с двумя сетевыми адаптерами, первый eth0 - nat, второй eth1 - внутренняя сеть.
По первым предварительным признакам скрытия:
- у вас во "внутрення сеть" должен работать DHCP сервер...
- или для хостов "внутрення сеть" вы должны расставить статические IP
 

akelot

New member
Сообщения
6
#7
Ну так с этого и нужно было начина6ть.
И показать эти IP. Какие?
Так я именно с этого и начал.
Windows 7 с одним сетевым интерфейсом - внутренняя сеть. В качестве шлюза по умолчанию стоит 192.168.1.1
Разве что не уточнил, ip винды - 192.168.1.10, оно и так подразумевается что в одной подсети.
 

Olej

New member
Сообщения
1 307
#8
Разве что не уточнил, ip винды - 192.168.1.10, оно и так подразумевается что в одной подсети.
Вот потому и спросил. В одной подсети с кем? с eth1?
А eth0 у вас какой IP? Какая подсеть?
И Linux хосты гораздо лучше работают и проще настраиваются, если их внешний интерфейс (у вас eth0) не NAT, а "сетевой мост" - переведите, и 50% проблем на будущее уйдут.
 

akelot

New member
Сообщения
6
#9
Вот потому и спросил. В одной подсети с кем? с eth1?
Ну в шапке же есть конфиг интерфейсов под спойлером. Повторюсь: eth1 - внутренняя сеть, согласно конфига ему присвоен адрес 192.168.1.1.

И Linux хосты гораздо лучше работают и проще настраиваются, если их внешний интерфейс (у вас eth0) не NAT, а "сетевой мост" - переведите, и 50% проблем на будущее уйдут.
Пробовал и в качестве моста. Да и будь там какие-то проблемы, то и на нем интернета не было бы.

UPD
Короче все получилось, прописав правила для интерфейсов без указания сетей
Код:
-A POSTROUTING -o eth0 -j MASQUERADE
-A POSTROUTING -o eth1 -j MASQUERADE
 
Последнее редактирование:

Olej

New member
Сообщения
1 307
#10
Короче все получилось, прописав правила для интерфейсов без указания сетей
Код:
-A POSTROUTING -o eth0 -j MASQUERADE
-A POSTROUTING -o eth1 -j MASQUERADE
Интересу ради воспроизвёл вашу задачу, только хост внутренней сети не Windows, а Linux, и получает он IP по DHCP, запущенному (isc-dhcp-server) на виртуальном роутере (на внутренний интерфейс ... где вдруг захочется запустить 10 хостов ;)).
Чисто в том виде как у вас правила не сработали, с ошибкой, типа такого:
Код:
root@astra:/etc/sysctl.d# iptables -A POSTROUTING -o eth1 -j MASQUERADE
iptables: No chain/target/match by that name.
Но вот так всё пошло:
Код:
root@astra:/etc/sysctl.d# iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
root@astra:/etc/sysctl.d# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
(сильно в детали я не вникал)
 

Olej

New member
Сообщения
1 307
#11
Интересу ради воспроизвёл вашу задачу, только хост внутренней сети не Windows, а Linux, и получает он IP по DHCP, запущенному (isc-dhcp-server) на виртуальном роутере
В такой конфигурации я могу в любой ВМ, имеющейся у меня в системе, всего только изменить тип адаптера сети на "внутренняя сеть", и все они автоматом поднимаются как внутренняя LAN, каждый хост которой имеет выход внаружу.
 

akelot

New member
Сообщения
6
#12
Разобрался, почему изначально никакими методами не получалось настроить. В конфиге виртуальной машины было включено PAE/NX. Когда писал что все получилось, проделывал на работе, а позже пробовал дома, где изначально и экспериментировал. В итоге увидел, что все равно не помогло, с теми же конфигами. Углубившись в сравнение конфигураций установки (пробовал с поддержкой ядра Hardened и без, т.к. не помнил как изначально устанавливал), результат не менялся, а после сравнения конфигураций машин выявил разницу, и после отключения все заработало.
 

Olej

New member
Сообщения
1 307
#13
В конфиге виртуальной машины было включено PAE/NX.
1. Довольно странное заключение... PAE - вариант адресации памяти для 32-бит систем, для 64-бит не должно оказывать никакого влияния, NX - бит запрета выполнения кода из страниц данных... А вообще - никто толком не может сказать что делает PAE/NX для 64-бит систем.
2. Включено-выключено на какой из ВМ? Которая виртуальный роутер? Или которые хосты внутренней LAN?

P.S. Посмотрел у себя в подобной модельной ситуации, пока её ещё не разобрал... В одних ВМ PAE/NX выключено, в других - включено ... это установлено по дефаулту при создании ВМ, когда-то я пользовался PAE для 32-бит дистрибутивов, сейчас просто не обращаю на него внимания... Почему в одних ВМ при создании он установлен, а в других сброшен - сказать не могу.
Думаю, что поищите другую причину неработоспособности - выглядит это предельно неправдоподобно.
 

Olej

New member
Сообщения
1 307
#15
Ещё вылез вопрос...
Настроил DHCP, forwarding, правила iptables... всё проверил на работоспособность... (всё это - Astra Linux CE)
Как это пишут в множестве разных рекомендаций, сохранил правила:
Код:
$ sudo /sbin/iptables-save > /etc/iptables.rules
Создал скрипт-файл /etc/network/if-up.d/forwarding:
Код:
# cat forwarding
/sbin/iptables-restore < /etc/iptables.rules
exit 0

# chmod a+x forwarding

# ls -l forwarding
-rwxr-xr-x 1 root root 52 Сен 18 12:55 forwarding
Поменял тип внешнего интерфейса (eth0 у меня) виртуального роутера на "сетевой мост", без NAT.
Перезагрузка...
ping с внутренних виртуальных хостов не идёт...
Проверяю на роутере.
Код:
olej@astra:~$ sudo /sbin/iptables-save
[sudo] пароль для olej:
olej@astra:~$
Правила ip-tables не записались при загрузке из /etc/iptables.rules ... как предполагалось скриптом из созданного мной /etc/network/if-up.d/forwarding!
Сделаю это вручную:
Код:
root@astra:/etc/dhcp# /sbin/iptables-restore < /etc/iptables.rules

root@astra:/etc/dhcp# /sbin/iptables-save
...
Теперь всё нормально, и ping с обоих хостов LAN замечательно идут.

Что может быть не так с начальной загрузкой правил iptables? Глаз замылен, не могу поймать...
 

oko

New member
Сообщения
1 257
#16
to Olej
Невыполнение скриптов из /etc/network/if-up.d - то ли бага, то ли фича Debian. Оптимальный вариант загрузки правил iptables уже приводил в другой теме форума. До прихода ужасного systemd было еще проще - через /etc/rc.local, теперь приходится в /etc/network/interfaces засовывать...
Еще оная бага обсуждалась тут (не проверял решение)...
 

Olej

New member
Сообщения
1 307
#17
Еще оная бага обсуждалась тут (не проверял решение)...
Почитал ... + подсмотрел в соседних скриптах /etc/network/if-up.d
Код:
root@astra:/etc/network/if-up.d# cat /etc/network/if-up.d/forwarding
#!/bin/sh
set -e

cat /etc/iptables.rules | /sbin/iptables-restore
exit 0
Теперь всё подымается с загрузки.