Вводные:
есть две сети 1.1.1.0/24 и 2.2.2.0/24
Между ними файрвол, который является шлюзом
Условно примерно так:
1.1.1.0/24-----[(1.1.1.254)FW(2.2.2.254)]-----2.2.2.0/24
Хосты из 1.1.1.0/24 пингуют хосты в 2.2.2.0/24
Хосты из 2.2.2.0/24 пингуют хосты в 1.1.1.0/24
Хосты из 1.1.1.0/24 могут ходить на любые порты в 2.2.2.0/24
Хосты из 2.2.2.0/24 не могут ходить на любые порты в 1.1.1.0/24, потому что люди, отвечающие за связность, из-за недопонимания настроили ACL только в одну сторону. В другую сторону тоже скоро настроят, но связность нужна ещё вчера.
Доступ есть ко всем хостам, доустановка сторонних пакетов затруднена, хотелось бы обойтись максимально стандартными способами.
Задача: как обеспечить связность в обратную сторону(это времянка на день-два, поэтому любые костыли подойдут).
Пока пытаюсь сделать это через SSH туннель.
Идея примерно такая:
1. Выбираем пару произвольных хостов, вешаем на них по новому адресу, чисто под туннель, делаем туннель
1.1.1.123<--->2.2.2.234
На этом шаге хост 2.2.2.234 может подключиться к 1.1.1.123 на любые порты.
2. Хост 1.1.1.123 будет выступать маршрутизатором для остальных хостов в 1.1.1.0/24, поэтому на нём делаем маршрут 2.2.2.0/24 via 1.1.1.123
Хост 2.2.2.234 будет выступать маршрутизатором для остальных хостов в 2.2.2.0/24, поэтому на нём делаем маршрут 1.1.1.0/24 via 2.2.2.234
3.На хостах сети 1.1.1.0/24 делаем маршрут 2.2.2.0/24 via 1.1.1.123
На хостах сети 2.2.2.0/24 делаем маршрут 1.1.1.0/24 via 2.2.2.234
Ожидаемый результат: всё сходу работает через туннель
Актуальный результат: на втором шаге туннель ломается.
Как я понимаю, это случается потому, что пакеты для пиров туннеля тоже заворачиваются в сам туннель, вместо того, чтобы бегать через дефолтный шлюз.
Вопрос: есть ли способ это разрулить? Ну или можно решить это принципиально иначе?
Ping
mky,
vel,
AS,
router,
anc
Решение:
NETWORK1 - первая сеть, из которой открыты все порты во вторую сеть
REAL_IP_IN_NETWORK1 - изначальный адрес хоста в первой сети
NETWORK1_GATEWAY - дефолтный шлюз на хосте в первой сети
EXT_TUNNEL_IP_IN_NETWORK1 - внешний адрес туннеля на хосте в первой сети
INT_TUNNEL_IP_IN_NETWORK1 - внутренний адрес туннеля на хосте в первой сети
NETWORK2 - вторая сеть, из которой закрыты все порты в первую сеть
REAL_IP_IN_NETWORK2 - изначальный адрес хоста во второй сети
NETWORK2_GATEWAY - дефолтный шлюз на хосте в первой сети
EXT_TUNNEL_IP_IN_NETWORK2 - внешний адрес туннеля на хосте во второй сети
INT_TUNNEL_IP_IN_NETWORK2 - внутренний адрес туннеля на хосте во второй сети
Важное примечание: если убрать вторые адреса и прописывать маршруты между REAL_IP_IN_NETWORK1 и REAL_IP_IN_NETWORK2, то тот хост из второй сети не сможет взаимодействовать с этим (REAL_IP_IN_NETWORK1) хостом из первой сети, так как весь траффик между ними пойдет не по тунелю, а порты перекрыты.
1. На хосте REAL_IP_IN_NETWORK1 вешаем доп. адрес EXT_TUNNEL_IP_IN_NETWORK1 в сети NETWORK1 чтобы туннель строился именно с него:
ip a a EXT_TUNNEL_IP_IN_NETWORK1/32 dev eth0
ip r a EXT_TUNNEL_IP_IN_NETWORK2/32 via NETWORK1_GATEWAY dev eth0 src EXT_TUNNEL_IP_IN_NETWORK1
2. На хосте REAL_IP_IN_NETWORK2 вешаем доп. адрес EXT_TUNNEL_IP_IN_NETWORK2 в сети NETWORK2 чтобы туннель строился именно на него:
ip a a EXT_TUNNEL_IP_IN_NETWORK2/32 dev eth0
ip r a EXT_TUNNEL_IP_IN_NETWORK1/32 via NETWORK2_GATEWAY dev eth0 src EXT_TUNNEL_IP_IN_NETWORK2
3. Поднимаем туннель c REAL_IP_IN_NETWORK1, чтобы в дальнейшем завернуть в него пакеты на заблокированные порты. После установления соединения на обоих хостах появляются интерфейсы tun0
ssh -b EXT_TUNNEL_IP_IN_NETWORK1 -w 0:0 EXT_TUNNEL_IP_IN_NETWORK2
4. На хосте REAL_IP_IN_NETWORK1 вешаем внутренний туннельный адрес INT_TUNNEL_IP_IN_NETWORK1 на tun0:
ip a a INT_TUNNEL_IP_IN_NETWORK1/32 peer INT_TUNNEL_IP_IN_NETWORK2 dev tun0
ip link set dev tun0 up
5. На хосте REAL_IP_IN_NETWORK2 вешаем внутренний туннельный адрес INT_TUNNEL_IP_IN_NETWORK2 на tun0:
ip a a INT_TUNNEL_IP_IN_NETWORK2/32 peer INT_TUNNEL_IP_IN_NETWORK1 dev tun0
ip link set dev tun0 up
6. На хосте REAL_IP_IN_NETWORK2 прописываем маршрут в NETWORK1 через INT_TUNNEL_IP_IN_NETWORK2:
ip r a NETWORK1 via INT_TUNNEL_IP_IN_NETWORK1 dev tun0 src REAL_IP_IN_NETWORK2
7. На хосте REAL_IP_IN_NETWORK1 прописываем маршрут в NETWORK2 через INT_TUNNEL_IP_IN_NETWORK1:
ip r a NETWORK2 via INT_TUNNEL_IP_IN_NETWORK2 dev tun0 src REAL_IP_IN_NETWORK1
8. На хостах в NETWORK2 прописываем маршрут в NETWORK1 через REAL_IP_IN_NETWORK2
ip r a NETWORK1 via REAL_IP_IN_NETWORK2
9. На хостах в NETWORK1 прописываем маршрут в NETWORK2 через REAL_IP_IN_NETWORK1
ip r a NETWORK2 via REAL_IP_IN_NETWORK1