- Интернет-шлюз для двух подсетей на Ubuntu Server 18.04 LTS
- Настройка сети для router
- Настройка сети для pc-1, pc-2 и pc-3
- Настройка сети для nfs-server, ftp-server, web-server
- Настройка интернет-шлюза
- Доступ к NFS-серверу за NAT
- Доступ к FTP-серверу за NAT
- Доступ к WEB-серверу за NAT
- Связь между подсетями
- Доступ к серверам за NAT по SSH
- Сохранение правил netfilter
- как объединить две подсети через Linux сервер?
- Re: как объединить две подсети через Linux сервер?
- Re: как объединить две подсети через Linux сервер?
- Re: как объединить две подсети через Linux сервер?
- Re: как объединить две подсети через Linux сервер?
- Re: как объединить две подсети через Linux сервер?
- Re: как объединить две подсети через Linux сервер?
- Re: как объединить две подсети через Linux сервер?
- Re: как объединить две подсети через Linux сервер?
- Re: как объединить две подсети через Linux сервер?
- Re: как объединить две подсети через Linux сервер?
- Re: как объединить две подсети через Linux сервер?
- Re: как объединить две подсети через Linux сервер?
- Re: как объединить две подсети через Linux сервер?
- Re: как объединить две подсети через Linux сервер?
- Объединение двух локальных сетей с одинаковым номерами сетей на Linux-шлюзе
- Теория. Путь пакета в ядре роутера: netfilter
- Реализация
- Результаты
Интернет-шлюз для двух подсетей на Ubuntu Server 18.04 LTS
Небольшой эксперимент создания интернет-шлюза для двух подсетей на базе на Ubuntu Server. У меня дома компьютер с установленной Windows 10 и VirtualBox. Давайте создадим семь виртуальных машин: router , pc-1 , pc-2 , pc-3 , nfs-server , ftp-server , web-server :
- Виртуальные машины pc-1 , pc-2 , pc-3 объединены в сеть 192.168.176.0/24
- Виртуальные машины nfs-server , ftp-server , web-server объединены в сеть 192.168.30.0/24
Виртуальная машина router будет обеспечивать выход в интернет для компьютеров подсетей 192.168.176.0/24 и 192.168.30.0/24 , у нее три сетевых интерфейса:
- enp0s3 (сетевой мост) — смотрит в домашнюю сеть, получает ip-адрес 192.168.110.8 от роутера Keenetic Air
- enp0s9 (внутреняя сеть) — смотрит в одну сеть с виртуальными машинами pc-1 , pc-2 , pc-3
- enp0s8 (внутреняя сеть) — смотрит в одну сеть с виртуальными машинами nfs-server , ftp-server , web-server
Тут надо сказать несколько слов о настройке сети в VirtualBox. Существует несколько способов, рассмотрим два из них:
- Сетевой мост — при таком подключении виртуальная машина становится полноценным членом локальной сети, к которой подключена основная система. Виртуальная машина получает адрес у роутера и становится доступна для других устройств, как и основной компьютер, по своему ip-адресу.
- Внутренняя сеть — тип подключения симулирует закрытую сеть, доступную только для входящих в ее состав машин. Поскольку виртуальные машины не имеет прямого доступа к физическому сетевому адаптеру основной системы, то сеть получается полностью закрытой, снаружи и изнутри.
Настройка сети для router
Сначала нужно посмотреть, как называются сетевые интерфейсы в системе:
Теперь редактируем файл /etc/netplan/01-netcfg.yaml
Применяем настройки и смотрим сетевые интерфейсы:
Первый сетевой интерфейс enp0s3 получил ip-адрес 192.168.110.8 от роутера Keenetic Air, этот ip-адрес закреплен постоянно. Второму сетевому интерфейсу enp0s8 мы назначили ip-адрес 192.168.30.1 . Третьему сетевому интерфейсу enp0s8 мы назначили ip-адрес 192.168.176.1 .
Настройка сети для pc-1, pc-2 и pc-3
Сначала для виртуальной машины pc-1 . Смотрим, как называются сетевые интерфейсы в системе:
Открываем на редактирование файл /etc/netplan/01-netcfg.yaml :
Применяем настройки и смотрим сетевые интерфейсы:
Для виртуальных машин pc-2 и pc-3 все будет аналогично, назначаем им ip-адреса 192.168.176.3 и 192.168.176.4 .
Настройка сети для nfs-server, ftp-server, web-server
Сначала для виртуальной машины nfs-server . Смотрим, как называются сетевые интерфейсы в системе:
Открываем на редактирование файл /etc/netplan/01-netcfg.yaml :
Применяем настройки и смотрим сетевые интерфейсы:
Для виртуальных машин ftp-server и web-server все будет аналогично, назначаем им ip-адреса 192.168.30.3 и 192.168.30.4 .
Настройка интернет-шлюза
Виртуальная машина router должна обеспечивать выход в интернет для компьютеров из двух подсетей 192.168.176.0/24 и 192.168.30.0/24 . По умолчанию транзитный трафик отключен, так что редактируем файл /etc/sysctl.conf :
И перезагружаем виртуальную машину router . После этого настраиваем netfilter с помощью утилиты iptables :
И вот что у нас получилось в итоге:
Теперь настроим SNAT (подмена адреса источника), что позволит всем компьютерам двух подсетей выходить в интернет, используя единственный ip-адрес 192.168.110.8 :
И смотрим, что получилось:
Доступ к NFS-серверу за NAT
Наш NFS-сервер расположен во внутренней сети 192.168.30.0/24 и имеет ip-адрес 192.168.30.2 . Чтобы обеспечить доступ к нему из подсети 192.168.110.0/24 , выполняем на виртуальной машине router команды (подробнее можно прочитать здесь):
И смотрим, что получилось:
Доступ к FTP-серверу за NAT
Наш FTP-сервер расположен во внутренней сети 192.168.30.0/24 и имеет ip-адрес 192.168.30.3 . Чтобы обеспечить доступ к нему из подсети 192.168.110.0/24 , выполняем на виртуальной машине router команды (подробнее можно прочитать здесь):
И смотрим, что получилось:
Доступ к WEB-серверу за NAT
Наш WEB-сервер расположен во внутренней сети 192.168.30.0/24 и имеет ip-адрес 192.168.30.4 . Чтобы обеспечить доступ к нему из подсети 192.168.110.0/24 , выполняем на виртуальной машине router команду:
И смотрим, что получилось:
Связь между подсетями
Чтобы обеспечить связь между подсетями 192.168.176.0/24 и 192.168.30.0/24 , добавим на маршрутизаторе еще два правила:
Проверим, что с виртуальной машины pc-1 можно достучаться до nfs-server :
И наоборот, что с виртуальной машины nfs-server можно достучаться до pc-1 :
Доступ к серверам за NAT по SSH
Чтобы иметь возможность управлять серверами, на каждый из них установлен SSH-сервер. И нужно обеспечить доступ к ним из внешней подсети 192.168.110.0/24 . Для этого выполняем на маршрутизаторе три команды:
Первая комнанда — мы отбираем tcp-пакеты, которые приходят на интерфейс enp0s3 на порт 2222 и отправляем эти пакеты виртуальной машине nfs-server на порт 22 , заменяя в пакетах пункт назначения на 192.168.30.2 . Вторая и третья команды позволяют получить доступ к ftp-server и web-server .
Открываем на физическом компьютере окно PowerShell и выполняем команду:
Сохранение правил netfilter
Созданные с помощью утилиты iptables правила пропадут при перезагрузке виртуальной машины router . Так что их нужно сохранить и восстанавливать при перезагрузке. В этом нам поможет пакет iptables-persistent :
При установке пакета будет предложено сохранить текущие правила iptables :
- в файл /etc/iptables/rules.v4 для протокола IPv4
- в файл /etc/iptables/rules.v6 для протокола IPv6
После установки пакета будет добавлена новая служба netfilter-persistent.service , которая при загрузке системы будет восстанавливать созданные нами правила:
При добавлении новых правил, надо сохранить конфигурацию с помощью команды
Восстановить ранее сохраненную конфигурацию можно с помощью команды
Источник
как объединить две подсети через Linux сервер?
есть две подсети 192.168.2.0 и 192.168.10.0 на сервере 2 сетивых карты
eth0 смотрит на 192.168.2.0
eth1 на 192.168.10.0
в FAQ№18.23 описана подобная ситуация.Все сделал как там написано,адреса сервера 192.168.10.100 и ..2.100 соответственно
ping с подсети ..10.0 проходит на адрес ..2.100,а на остальные,например 192.168.2.1 нет.
что еще надо донастроить,чтобы все работало?
на сервере стоит ASPLinux9.2
Re: как объединить две подсети через Linux сервер?
man ifconfig; man route; желательно посмотреть на тему nat и iptables
Re: как объединить две подсети через Linux сервер?
для переадресации трафика: echo «1» > /proc/sys/net/ipv4/ip_forward если с сервака все (все две сети) пингуется — настраивай таблицу маршрутизации (route).
по поводу nat’a — мне кажеться он здесь не уместен, на кой скрывать реальные ip?
Re: как объединить две подсети через Linux сервер?
А маршруты в сетях ты прописал?
Надо чтобы хосты из 192.168.2.0 знали что для 192.168.10.0 надо слать на 192.168.2.100
Для этого на этих хостах надо прописать маршрут явно, либо по умолчанию
Да и адреса роутера лучше возьми или .254 или .1
Re: как объединить две подсети через Linux сервер?
ЗЫ: FAQ надо дополнить.
В соединяемых подсетях надо прописать маршрут на настраиваемый роутер. В данном случае лучше не пользовать маршрут по умолчанию, ибо при коннекте по PPP он может измениться и вторая подсеть отвалится.
Re: как объединить две подсети через Linux сервер?
Re: как объединить две подсети через Linux сервер?
1 в ip_forward добавил так ping с клиента проходит только при явном задании маршрута на нем,например: route add 192.168.10.0 mask 255.255.255.0 192.168.2.1 metric 2(это в винде)
то есть надо ip сервера поменять на . 254?и маршрут соответственно?
Re: как объединить две подсети через Linux сервер?
Тебеж сказали прописать маршрут до той сети в которую тебе попасть надо! под виндой: route add -p 192.168.X.0 mask 255.255.255.0 192.168.Y.N где X другая подсеть, Y подсеть клиента, N роутер.
Re: как объединить две подсети через Linux сервер?
сделал это уже давно,роутер я пингую и 1ю и 2ю подсеть,а вот остальные машины нет,то есть ping 192.168.Y.роутер с сети X проходит,а дальше нет.
Re: как объединить две подсети через Linux сервер?
Тоесть ты маршрут который я те сказал у каждого клиента прописал?
Re: как объединить две подсети через Linux сервер?
я пока на одном все настраиваю,но он там и раньше был,только адрес роутера поменял.тоже самое дальше роутера не идет.
Re: как объединить две подсети через Linux сервер?
кстати машины с сети Х без прописаного маршрута видят имя машины с сети У но зайти на нее не могут.
Re: как объединить две подсети через Linux сервер?
Попробуй добавить в /etc/sysctl.conf:
# enable ARP proxing for multiple interfaces routing
net.ipv4.conf.all.proxy_arp = 1
и перезапустить сеть.
Думается поможет. И вообще читайте документацию — это полезно, особенно на темы статической маршрутизации.
Re: как объединить две подсети через Linux сервер?
спасибо огомное все заработало,а можно ссылку на толковую документацию?
Re: как объединить две подсети через Linux сервер?
Потом документацию, относящуюся к сетевой подсистеме ядра.
Найти ее можно в дереве исходников ядра 🙂
Источник
Объединение двух локальных сетей с одинаковым номерами сетей на Linux-шлюзе
При создании локальной сети не каждый администратор подходит с ответственностью к выбору диапазона адресов. А может и не каждый догадывается о наличии частных диапазонов кроме 192.168.0.0/24. И со временем такая бомба замедленного действия может дать о себе знать. Локальные сети объединяются, возникает потребность в коммуникации между хостами разных сетей. И тут выясняется, что номера сетей совпадают. И менять их по каким либо причинам проблематично или невозможно.
В таком случае, серверу, маршрутизирующему пакеты между сетями, остается сделать вид, что номера сетей различны и выдавать желаемое за действительное. В богатом арсенале Linux есть средства для таких манипуляций: iptables с NETMAP и утилита ip.
Из сети LAN1 мы хотим послать пакет в сеть LAN2. Но мы не можем послать его в сеть, номер которой одинаков с нашим. В самом частом случае 192.168.0.0/24. Если такой пакет появится в LAN1, он не будет знать, что есть LAN2, он будет искать такую машину в LAN1. Таковы правила маршрутизации по умолчанию.
Значит, надо посылать пакеты с другими адресами, которые уйдут в роутер.
Как это должно вглядеть для наблюдателя из LAN1
Например, пользователь сети LAN1 будет видеть сеть LAN2 как 10.8.1.0/24. Тут уже никакого пересечения адресов. LAN1 доволен.
Как это выглядит с обеих сторон
Из LAN1 приходит пакет с адресом отправителя 192.168.0.100 и адресом назначения 10.8.1.200. Из роутера с интерфейса LAN2 выходит тот же пакет с адресом отправителя 10.8.1.100 и с адресом назначения 192.168.0.200. Пакет проходит до адреса назначения и тот шлет в ответ на адрес отправителя со своим адресом. Пакет уходит в роутер. В нем происходит обратное преобразование и пользователь LAN1 получает ответ с того адреса, на который отправил пакет.
Теория. Путь пакета в ядре роутера: netfilter
Здесь я попытаюсь рассказать о путешествии транзитного трафика через наш Linux-роутер. Для полного понимания процесса путешествия пакета лучше видеть схему его прохождения из Википедии по цепочкам netfilter.
Наш пакет с [источником|назначением] [192.168.0.100|10.8.1.200] попадает на сетевой интерфейс роутера и первой его цепочкой будет PREROUTING.
PREROUTING
Проходя по цепочке он попадает в таблицу PREROUTING mangle. В которой посредством iptables мы определяем интерфейс, с которого он пришел, и адрес источника. Если это наш пациент, мы его помечаем действием MARK.
После чего пакет [192.168.0.100|10.8.1.200|(marked)] попадает в таблицу nat. Эта таблица предназначена для трансляции адресов. Поскольку не существует реального адреса 10.8.1.200, то на последующем этапе маршрутизации пакет будет отброшен или уйдет в неизвестном направлении. Поэтому заменяем ему адрес назначения на тот, на который он действительно должен пойти именно тут: [192.168.0.100|192.168.0.200|(marked)]. Делается это действием NETMAP, которое заменяет номер сети по маске.
ROUTING
Наш пакет пакет попадает на этап принятия решения, куда он должен идти дальше. Он промаркирован, поэтому можем отправить его в специальную таблицу маршрутизации, которую мы создали для такого случая. Там принимается решение, что пакет не предназначен для локального компьютера и должен идти в LAN2.
Пакет успешно проходит цепочку FORWARDING. Попадает опять на этап маршрутизации. Если в FORWARDING с ним ничего не случилось, а по идее не должно было. Он идет тем же путем. После чего попадает в POSTROUTING.
POSTROUTING
Без изменений доходя до таблицы nat. Мы должны изменить адрес источника. Ведь ответ на пакет [192.168.0.100|192.168.0.200] будет отправлен в локальную сеть, а не в роутер. Чтоб он попал обратно в роутер, меняем адрес источника на несуществующий [10.8.1.100|192.168.0.200]. Опять же NETMAP. После этого пакет выходит в LAN2.
С ответным пакетом проделываем обратную процедуру, чтоб он дошел до изначального источника.
Реализация
Метим входящие пакеты на нашу несуществующую сеть для дальнейшего их опознавания в netfilter. Можно обойтись и без меток, использовать в качестве критериев адрес источника, входной интерфейс и адрес назначения, но в случае сложной маршрутизации с отдельными таблицами маршрутизации решить куда отправить пакет будет проще всего по метке.
Узнаем пакет по метке и действием NETMAP в таблице PREROUTING подменяет номер сети.
В POSTROUTING NETMAP подменяет адрес источника.
После этого все обращения на подсеть 10.8.1.0/24 будут выглядеть внутри LAN2, как обращения из подсети 10.8.2.0/24.
ROUTING
Чтобы маршрутизировать пакеты по метке необходимо создать свою таблицу маршрутизации.Редактируем /etc/iproute2/rt_tables, добавляя уникальное число и название новой таблицы.
256 netmap
Далее надо добавить правило, по которому в эту таблицу будут направляться пакеты на маршрутизацию.
Теперь помеченные пакеты будут уходить на маршрутизацию в таблицу netmap.
И последним шагом нужно определить маршруты в таблице netmap.
Или можно указать в особом случае отдельный шлюз, если в эту сеть трафик от роутера идет через него. Что-то в духе:
Пока рано радоваться, к нам придет ответ из LAN2 [192.168.0.100|10.8.2.200].
Надо сделать все тоже самое, но только преобразовать обратно. Увы, netfilter сам этого не делает. Все действия уже описаны, приведу только последовательность команд для преобразования адресов в одну и в обратную сторону. (В первой таблице маршрутизации необходимости в данном случае нет, но при иных обстоятельствах может понадобиться.)
Результаты
Вот что пишет tcpdump (первый пример с vnc, второй с пингом):
12:46:46.358969 IP 192.168.0.100.41930 > 10.8.1.200.5900: Flags [P.], seq 647:657, ack 261127, win 1213, options [nop,nop,TS val 460624 ecr 171318], length 10
12:46:46.358978 IP 10.8.2.100.41930 > 192.168.0.200.5900: Flags [P.], seq 647:657, ack 261127, win 1213, options [nop,nop,TS val 460624 ecr 171318], length 10
12:46:46.505847 IP 192.168.0.200.5900 > 10.8.2.100.41930: Flags [.], ack 657, win 64879, options [nop,nop,TS val 171320 ecr 460624], length 0
12:46:46.505861 IP 10.8.1.200.5900 > 192.168.0.100.41930: Flags [.], ack 657, win 64879, options [nop,nop,TS val 171320 ecr 460624], length 0
12:47:46.363905 IP 192.168.0.100 > 10.8.1.200: ICMP echo request, id 2111, seq 1, length 64
12:47:46.363922 IP 10.8.2.100 > 192.168.0.200: ICMP echo request, id 2111, seq 1, length 64
12:47:46.364049 IP 192.168.0.200 > 10.8.2.100: ICMP echo reply, id 2111, seq 1, length 64
12:47:46.364054 IP 10.8.1.200 > 192.168.0.100: ICMP echo reply, id 2111, seq 1, length 64
Tcpdump отлично демонстрирует, как происходит преобразование адресов на входе в один интерфейс и на выходе в другой и в обратную сторону.
Так же отлично работают остальные сервисы, типа Samba и ее аналог на Windows.
Если соединение между сетями организовано посредством туннеля OpenVPN, то для правильной маршрутизации со стороны клиента в конфиг сервера необходимо добавить дополнительный маршрут через туннель.
push «route 10.8.1.0 255.255.255.0»
Источник