LINUX.ORG.RU
ФорумAdmin

Как сделать сервер маршрутизации?

 ,


0

4

Работаю сейчас с одним из заказчиков и у него gitlab «недоступен без VPN». Что это означает - что gitlab только в локальной сети есть или там фильтрация по IP я так и не смог добиться: «для доступа ставь VPN».

VPN’ом они называют вот такую штуку: https://www.fortinet.com/ru/support/product-downloads

Ставить ее себе на компьютер я не очень хочу. Но могу поставить на сервер разработки… сделал и тут выяснилось что российские IP заблокировны на VPN сервере, а серверы разработки у меня в России и там другой IP не получить. С их переносом есть сложности, да и мой комп тоже надо подключить как-то к этому VPN. Поэтому придумал взять VPS в другой локации, поставить туда эту штуку и какой-нибудь настоящий VPN к которому и будут цепляться и со своего ноута и с сервера разработки.

Все сделал, запустил, прицепился… как мне теперь сделать так чтобы мой OpenVPN использовал для некоторых маршрутов как выход подключение forti?

Сейчас например ping с машины где работает сервер OpenVPN и клиент форти к целевому серверу проходит. А с машины которая подключена к этому серверу OpenVPN - нет.

Что делать дальше?

★★★★★

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

как мне теперь сделать так чтобы мой OpenVPN использовал для некоторых маршрутов как выход подключение forti?

Этот forti создает новый сетевой интерфейс? Тогда достаточно просто добавить маршруты на него.

urxvt ★★★★★
()

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

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

Ага.

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet xx.xx.xx.181  netmask 255.255.254.0  broadcast xx.xx.xx.255
        inet6 тут что-то на ipv6
        inet6 тут что-то на ipv6
        ether 22:75:cb:79:e8:95  txqueuelen 1000  (Ethernet)
        RX packets 831886  bytes 75860679 (75.8 MB)
        RX errors 0  dropped 1703  overruns 0  frame 0
        TX packets 70099  bytes 28742289 (28.7 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 311  bytes 25393 (25.3 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 311  bytes 25393 (25.3 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1500
        inet 10.8.0.1  netmask 255.255.255.0  destination 10.8.0.1
        inet6 fddd:1194:1194:1194::1  prefixlen 64  scopeid 0x0<global>
        inet6 fe80::104d:a726:e21e:87d8  prefixlen 64  scopeid 0x20<link>
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 500  (UNSPEC)
        RX packets 34698  bytes 4848344 (4.8 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 34425  bytes 20867645 (20.8 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vpn0073533d6d: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1400
        inet yy.yy.yy.17  netmask 255.255.255.255  destination yy.yy.yy.17
        inet6 тут что-то на ipv6
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 500  (UNSPEC)
        RX packets 46  bytes 8191 (8.1 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1486  bytes 151361 (151.3 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Вот как и какие маршруты добавить для меня загадка.

Учитывая что подключаясь к VPS по VPN я начинаю выходить через ip xx.xx.xx.181 я полагаю что у меня все норм. И надо добавить правило на машине с VPN. Я смотрю в таблицу NAT и вижу там: -A POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to-source xx.xx.xx.181

Ок. Сбрасываю таблицу, делаю: iptables -t nat -A POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to-source yy.yy.yy.17 Упс, все сломалось. Интернеты вообще с ноута недоступны становятся.

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

Вот я не понимаю зачем мне На машине, которая заходит в опенвпн клиентом, маршрут в фортинетовскую сеть должен быть прописан через опенвпновский айпишник.?

Чтобы все остальное не через него ходило? Ну ладно - пропишу. Потом, когда все заработает. Мне сейчас надо чтобы на VPS OpenVPN наружу ходил через этот forticlient.

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

Увы это тоже не помогает. Но я вдруг понял что это все и не должно работать ведь:

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
...
tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1500
...
vpn0073533d6d: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1400

Но отчего-то просто урезание MTU на моем сетевом подключении до 1200 все равно не помогает ((

На всякий случай на сервере еще добавил -A FORWARD -p tcp -m tcp –tcp-flags SYN,RST SYN -j TCPMSS –clamp-mss-to-pmtu

Но все равно ничего не работает (((

Suntechnic ★★★★★
() автор топика
Последнее исправление: Suntechnic (всего исправлений: 2)
root@hutyp117212 ~# iptables -t nat -L -n -v
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   35  2521 SNAT       all  --  *      *       10.8.0.0/24         !10.8.0.0/24          to:yy.yy.yy.1
root@hutyp117212 ~# iptables -t nat -L -n -v
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   51  3747 SNAT       all  --  *      *       10.8.0.0/24         !10.8.0.0/24          to:yy.yy.yy.1

Типа пакеты идут… но ничего не работает. Интернета вообще нет в этом случае.

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

Я только что обратил внимание, что у тебя для vpn указан один и тот же адрес с обоих сторон.

 vpn0073533d6d: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1400
        inet yy.yy.yy.17  netmask 255.255.255.255  destination yy.yy.yy.17
Это опечатка?

Если все совсе плохо и нет идей о причинах, то добавляй "-t raw -j TRACE" с уточняющими фильтрами (хотя бы адрес источника и протокол). Возможно потребуется заклинание

sysctl -w net.netfilter.nf_log.2=nf_log_ipv4
sysctl -w net.netfilter.nf_log_all_netns=1

И смотри куда уходит твой пакет.

Для упрощения разбора вывода в dmesg у меня есть такой скрипт

#!/usr/bin/env perl
use strict;
use experimental 'smartmatch';

my @R;
open(F,"dmesg|") || die;
while(<F>) {
        next if !/TRACE:/;
        chomp;
        push @R,[grep !/^(TOS=|PREC=|TRACE:)/, split /\s+/];
}
close(F);

my $LL = $R[$#R];
die if !$LL;
die if $LL->[0] !~ /^\[(\d+)\.\d+\]$/;
my $st = 0;
my @PX;
foreach my $L (@R) {
        next if !$st && $L->[1] !~ /^raw/;
        $st = 1;
        @PX = () if $L->[1] =~ /^raw/;
        my @t = splice(@$L,0,2);
        foreach my $i (@$L) {
                if(!($i ~~ @PX)) {
                        push @PX,$i;
                        push @t,$i;
                }
        }
        print join(" ",@t),"\n";
}

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

Это опечатка?

Неа. Я сам там удивлен. Постоянно так. И на OpenVPN так же. В т.ч. на клиенте.

Попробую завтра. Спс.

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

Сейчас например ping с машины где работает сервер OpenVPN и клиент форти к целевому серверу проходит. А с машины которая подключена к этому серверу OpenVPN - нет.

у тебя openvpn является default роутом для клиента?

если да, то включи в ядре ip-форвардинг и добавь маскарадинг в iptables

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

А где эту виртуалку поднять? Еще раз - мой IP забанен не севере форти. Ну и к тому же вопрос то останется ровно тем же - как сделать чтобы запросы наружу шли через форти?

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

у тебя openvpn является default роутом для клиента?

Не могу ответить, поскольку не понимаю вопроса.

то включи в ядре ip-форвардинг и добавь маскарадинг в iptables

Включен конечно. А что маскарадинг? Оно вон с SNAT не работает. Впрочем я пробовал - добавлял маскарадинг:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -o vpn00d092ccbd -j MASQUERADE
Так вот делал. Бестолку.

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

Если все совсе плохо и нет идей о причинах, то добавляй «-t raw -j TRACE» с уточняющими фильтрами (хотя бы адрес источника и протокол). Возможно потребуется заклинание

Я не уверен что понимаю как это использовать

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

Да, через неё и идет. Кроме наличия на ней форти, это обычная ВПСка с OpenVPN каких у каждого тут по десятку.

> traceroute ya.ru
traceroute to ya.ru (5.255.255.242), 30 hops max, 60 byte packets
 1  _gateway (10.8.0.1)  92.599 ms  182.773 ms  182.786 ms
... 

Вот так вот говорит

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

Тут такое дело... не знаю даже как сказать. Я короче облажался с тем что форти нормально работает.

На самом деле с сервера где он работает все соединения наружу идут с ее обычного внешнего IP. Форти подключается, но через него ничего похоже не ходит (хотя статистика на интерфейсе есть, но это видимо внутренний обмен). Я проверял свой внешний IP и он не фортивский. Но я думал что у форти получает маршруты с сервера и поэтому через него идут пакеты только к целевым узлам. Но простой wget на главную корпоративного gitlab выдает 403. Видимо все же он идет не через форти. Дальше даже не знаю как отлаживать (((

Suntechnic ★★★★★
() автор топика

был бы заказчиком отказался бы. это небезопасно палить чужие пароли. а вообще есть man 8 route для перенаправления трафика + скрипт который вы напишите и запустите для него после установления сессии

usavich
()

кажется, тут нигде не упоминается, что были добавлены маршруты а-ля ip r r <защищенная-сеть-за-фортинетом> via <ip-фортинета> dev vpn0073533d6d ? (часть via <ip-фортинета> возможно стоит не указывать в данном случае)

что в ip r s ?

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