URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 95597
[ Назад ]

Исходное сообщение
"Статическая маршрутизация между двумя сетями"

Отправлено KomaLex , 06-Май-14 05:27 
Есть две физически разнесенные сети:
1. 192.168.11.0/24
2. 192.168.0.0/24
В первой сети есть два канала выхода в интернет и подключение второй сети через pptp.
В первой сети всей маршрутизацией управляет сервер на базе freebsd, pf, mpd5. Во второй сети стоит Zyxel Keenetic Giga II. На нем настроен интернет pppoe и настроен pptp туннель к первой сети и прописана статическая маршрутизация:

192.168.11.0 / 255.255.255.0    192.168.11.6    PPTP0         yes

192.168.11.6 это статический адрес который выдается подключению с zyxel.
Во freebsd следующие настройки:
Настройки mpd:
# cat mpd.conf

startup:
        set user komal * admin
        set console self 127.0.0.1 5005
        set console open
        set web self 0.0.0.0 5006
        set web open
        log +all

default:
        load pptp_server

pptp_server:

        set ippool add pool1 192.168.11.32 192.168.11.99

        create bundle template B
        set iface enable proxy-arp
        set iface idle 1800
        set iface enable tcpmssfix
        set ipcp yes vjcomp
        set ipcp ranges 192.168.11.5/32 ippool pool1
        set ipcp dns 192.168.11.254
        set bundle enable compression
        set ccp yes mppc
        set mppc yes e40
        set mppc yes e128
        set mppc yes stateless

        create link template L pptp
        set link action bundle B
        set link enable multilink
        set link yes acfcomp protocomp
        set link no pap chap eap
        set link enable chap
        set link keep-alive 10 60
        set link mtu 1460
        set pptp self 85.x.x.x,192.168.11.254
        set link enable incoming


# cat mpd.secret

rb                      "password"               192.168.11.6

Настройки pf приведу все, то что касается этого подключения прокоментирую:
# cat /etc/pf.rules


strnz_if="re1"
ttk_if="re2"
int_if="re0"
#Это как раз тот интерфейс, который создается при подключении второй сети с адресом 192.168.11.6
rb_if='ng2'

gw_strnz="85.x.x.229"
strnz_ip="85.x.x.230"

gw_ttk="192.168.22.1"
ttk_ip="192.168.22.2"

#ip адрес подключения из второй сети
gw_rb='192.168.11.6'


int_net="192.168.11.0/24"
ttk_net="192.168.22.0/24"

#подсеть второй сети
rb_net="192.168.0.0/24"

to_strnz="{ 192.168.11.2, 192.168.11.3, 192.168.11.4 }"
services_ext="{ 22 25 53 80 }"

icmp_types="{ echoreq, unreach}"

set block-policy return
set skip on lo0
scrub in all

nat on $strnz_if from $int_net to any -> ($strnz_if)
nat on $ttk_if from $int_net to any -> ($ttk_if)
rdr on $ttk_if inet proto tcp from any to any port 25 -> 192.168.11.17 port 25

#перенаправление трафика адресованного в подсеть второй сети в интерфейс, который знает где эта сеть.
rdr on $int_if inet proto tcp from any to $rb_net -> ($rb_if)

block all

pass in on $ttk_if inet proto { tcp,udp } from any to any port $services_ext flags S/SA keep state

pass in on $strnz_if reply-to ($strnz_if $gw_strnz) proto tcp from any to $strnz_if port ssh keep state
pass in on $ttk_if reply-to ($ttk_if $gw_ttk) proto tcp from any to $ttk_if port ssh keep state
pass in on $strnz_if reply-to ($strnz_if $gw_strnz) proto tcp from any to $strnz_if port 1723
pass in on $ttk_if reply-to ($ttk_if $gw_ttk)  proto tcp from any to $ttk_if port 1723
pass in on $strnz_if reply-to ($strnz_if $gw_strnz) proto tcp from any to $strnz_if port 25
pass in on $strnz_if reply-to ($strnz_if $gw_strnz) proto tcp from any to $strnz_if port 110
pass in on $ttk_if reply-to ($ttk_if $gw_ttk)  proto tcp from any to $ttk_if port 110
pass in on $strnz_if reply-to ($strnz_if $gw_strnz) proto tcp from any to $strnz_if port 143
pass in on $ttk_if reply-to ($ttk_if $gw_ttk)  proto tcp from any to $ttk_if port 143
pass in on $strnz_if reply-to ($strnz_if $gw_strnz) proto tcp from any to $strnz_if port 21
pass in on $ttk_if reply-to ($ttk_if $gw_ttk)  proto tcp from any to $ttk_if port 21
pass in on $strnz_if reply-to ($strnz_if $gw_strnz) proto tcp from any to $strnz_if port 80
pass in on $ttk_if reply-to ($ttk_if $gw_ttk)  proto tcp from any to $ttk_if port 80
pass in on $strnz_if reply-to ($strnz_if $gw_strnz) proto tcp from any to $strnz_if port 53
pass in on $ttk_if reply-to ($ttk_if $gw_ttk)  proto tcp from any to $ttk_if port 53
pass in on $strnz_if reply-to ($strnz_if $gw_strnz) proto udp from any to $strnz_if port 53
pass in on $ttk_if reply-to ($ttk_if $gw_ttk)  proto udp from any to $ttk_if port 53
pass in on $strnz_if reply-to ($strnz_if $gw_strnz) proto icmp from any to $strnz_if icmp-type $icmp_types
pass in on $ttk_if reply-to ($ttk_if $gw_ttk) proto icmp from any to $ttk_if icmp-type $icmp_types


pass quick on $int_if from any to any
pass quick from $int_net to $int_net
#разрешаем все на интерфейсе из второй сети
pass on $rb_if from any to any

#перенаправляем трафик пришедший на интерфейс первой локальной сети и адресованный во вторую сеть в интерфейс из второй сети.
pass in quick on $int_if route-to ($rb_if $gw_rb) from $int_net to $rb_net keep state

pass in quick on $int_if route-to ($ttk_if $gw_ttk) from $int_net to $ttk_net keep state
pass in quick on $int_if route-to ($strnz_if $gw_strnz) from $to_strnz to any keep state
pass in quick on $int_if route-to ($ttk_if $gw_ttk) from $int_net to any keep state

#перенаправляем весь исходящий трафик от vpn интерфейса из второй сети в этот канал.
pass out quick route-to ($rb_if $gw_rb) from $rb_if to any keep state

pass out quick route-to ($strnz_if $gw_strnz) from $strnz_if to any keep state
pass out quick route-to ($ttk_if $gw_ttk) from $ttk_if to any keep state

Добавлен статический маршрут из первой сети во вторую:


route add -net 192.168.0.0/24 192.168.11.6

netstat -nr


Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
default            192.168.22.1       UGS         0  7127390    re2
85.234.126.228/30  link#4             U           0     2501    re1
85.234.126.230     link#4             UHS         0      542    lo0
127.0.0.1          link#9             UH          0   449160    lo0
192.168.0.0/24     192.168.11.6       UGS         0        2    ng2
192.168.11.0/24    link#3             U           0   592239    re0
192.168.11.5       link#10            UHS         2        0    lo0
192.168.11.6       link#12            UH          0    96469    ng2
192.168.11.7       link#10            UH          0      814    ng0
192.168.11.9       link#11            UH          0    22360    ng1
192.168.11.254     link#3             UHS         0   556156    lo0
192.168.22.0/24    link#5             U           0     2700    re2
192.168.22.2       link#5             UHS         0     1226    lo0

И все вроде бы работает, но пропадают пакеты. Собственно делается это в основном из-за того, что один из серверов для второй сети расположен в первой.
Теряется довольно много пакетов. Ну примерно процентов 25-30.
И в первой сети и во второй есть виндовый сервер win2003. Так вот если я на сервере из второй сети настраиваю входящие подключения, на зикселе пробрасываю tcp порт 1723, а на сервере из первой сети настраиваю vpn подключение к серверу из второй сети. По сути тот же впн туннель, то пинги не теряются. Канал стабилен.

и есть еще одно странное обстоятельство. Когда я пингую с сервера freebsd(на котором настроена вся эта маршрутизация и на котором присутствует этот впн интерфейс от зикселя)  из первой сети любой комп из второй сети, то пакеты тоже не теряются.
Как только пинг из второй сети или или из первой сети с любого другого компа то пинги начинают теряться.
Я отсюда сделал вывод (не знаю правильный или нет) что пакеты теряются где то в процессе маршрутизации между интерфейсами на сервере freebsd, а не в канале.

Подскажите куда капать. Очень нужно настроить это все.

Да кстати, самое важное. Пинги начинают пропадать, когда увеличиваешь размер пакета. Обычные пакеты в 32 бита не пропадают. А в том канале, между двумя серверами не пропадают никакие пакеты.


Содержание

Сообщения в этом обсуждении
"Статическая маршрутизация между двумя сетями"
Отправлено reader , 06-Май-14 12:31 
>[оверквотинг удален]
> set block-policy return
> set skip on lo0
> scrub in all
> nat on $strnz_if from $int_net to any -> ($strnz_if)
> nat on $ttk_if from $int_net to any -> ($ttk_if)
> rdr on $ttk_if inet proto tcp from any to any port 25
> -> 192.168.11.17 port 25
> #перенаправление трафика адресованного в подсеть второй сети в интерфейс, который знает
> где эта сеть.
> rdr on $int_if inet proto tcp from any to $rb_net -> ($rb_if)

это не перенапровление трафика, а изменения ip получателя при отправке пакета из-за $int_if в rb_net="192.168.0.0/24", при этом с самой free трафик под это правило не попадет

в целом описание топологии не информативно и оперировать 1 и 2 подсеть плохо потому что это у вас это уже засело в голове какая первая а какая вторая, а для того кто в голове прикидывает вашу топологию это не удобно

>[оверквотинг удален]
> сети, то пакеты тоже не теряются.
> Как только пинг из второй сети или или из первой сети с
> любого другого компа то пинги начинают теряться.
> Я отсюда сделал вывод (не знаю правильный или нет) что пакеты теряются
> где то в процессе маршрутизации между интерфейсами на сервере freebsd, а
> не в канале.
> Подскажите куда капать. Очень нужно настроить это все.
> Да кстати, самое важное. Пинги начинают пропадать, когда увеличиваешь размер пакета. Обычные
> пакеты в 32 бита не пропадают. А в том канале, между
> двумя серверами не пропадают никакие пакеты.


"Статическая маршрутизация между двумя сетями"
Отправлено KomaLex , 07-Май-14 05:16 
> это не перенапровление трафика, а изменения ip получателя при отправке пакета из-за
> $int_if в rb_net="192.168.0.0/24", при этом с самой free трафик под это
> правило не попадет
> в целом описание топологии не информативно и оперировать 1 и 2 подсеть
> плохо потому что это у вас это уже засело в голове
> какая первая а какая вторая, а для того кто в голове
> прикидывает вашу топологию это не удобно

А как сделать перенаправление? Ну на подобии статических маршрутов на маршрутизаторе?
Или в ipfw бала такая команда fwd. Форвардинг, как это реализуется в pf?
В общем мне нужно настроить маршрутизацию между двумя сетями, без всяких натов и изменений адресов. Если сократить задачу и без нумерации сетей. ТО как то так:

Есть маршрутизатор Zyxel на нем три интерфеса
1. Внешний с статическим IP, на него приходят запросы на порт 80 и 25 которые мне нужны.
2. Внутренний интерфейс локальной сети с адресом 192.168.0.254/24
3. PPTP интерфейс VPN тунель в сеть физически находящуюся в другом месте. Имеет адрес из другой сети 192.168.11.6

Есть другая сеть с сервером freebsd в качестве маршрутизатора, на ней 4 интерфеса:
1. Внешний интерфейс а с статическим IP адресом, через это подключение Zyxel подключается к PPTP серверу на базе MPD5 и создается vpn тунель.
2. Внешний интерфейс для маловажного трафика и качалок. В данной задаче никак не уччаствует.
3. Внутренний интерфейс с адресом 192.168.11.254 смотрит в локальную сеть. В которой еще находится один сервер с адресом 192.192.168.11.17.
4. Входящий PPTP интерфейс, который создается при VPN подключении маршрутизатора Zyxel из другой сети. 192.168.11.5->192.168.11.6

Задача 1: настроить маршрутизацию между двумя сетями без ограничений. Что бы любой компьютер из сети с адресом 192.168.0.0/24 мог обращаться к любому компьютеру из сети 192.168.11.0/24 без ограничений и любой компьютер из локальной сети 192.168.11.0/24 мог обращаться к любому компьютеру из локальной сети 192.168.0.0/24 так же без ограничений.
Маршрутизация, потому что статические маршруты работают быстрее чем нат. ДА и неправильно это настраивать нат в интранете.
Похожие задачи раньше решал на cisco, там между vlan с разными адресными пространствами. А теперь вот надо на pf.

В том виде как у меня сейчас сделано все работает но не стабильно. При увеличении пакетов они начинают теряться. Подозреваю что от неправильности понимания как это все тут работает.

Задача 2: Настроить порт форвардинг приходящего трафика на порты 25 и 80 маршрутизатора Zyxel на сервер из другой сети с адресом 192.168.11.17.
На Zyxel порт форвардин настраивается просто. Но тут еще на маршрутизаторе freebsd из другой сети надо как то настроить пересылку трафика. У сервера с адресом 192.168.11.17 в качестве шлюза указан локальный интерфейс маршрутизатора freebsd 192.168.11.254 а маршрутизатор zyxel. Поэтому tcpdump показывает, что до сервера 192.168.11.17 пакеты доходят, но обратно куда то не туда уходят. Вернее понятно куда, они уходят на интерфейс с адресом 192.168.11.254 а вот там их как то, с помощью pf надо перенаправить обратно в маршрутизатор zyxel в его pptp интерфейс vpn тунеля с адресом 192.168.11.6

Так вроде понятно? Помогите люди добрые. Запутался уже во всем этом :).


"Статическая маршрутизация между двумя сетями"
Отправлено reader , 07-Май-14 11:14 
>> это не перенапровление трафика, а изменения ip получателя при отправке пакета из-за
>> $int_if в rb_net="192.168.0.0/24", при этом с самой free трафик под это
>> правило не попадет
>> в целом описание топологии не информативно и оперировать 1 и 2 подсеть
>> плохо потому что это у вас это уже засело в голове
>> какая первая а какая вторая, а для того кто в голове
>> прикидывает вашу топологию это не удобно
> А как сделать перенаправление? Ну на подобии статических маршрутов на маршрутизаторе?
> Или в ipfw бала такая команда fwd. Форвардинг, как это реализуется в
> pf?

route-to , но для задачи 1 помоему не нужен
> В общем мне нужно настроить маршрутизацию между двумя сетями, без всяких натов
> и изменений адресов. Если сократить задачу и без нумерации сетей. ТО
> как то так:
> Есть маршрутизатор Zyxel на нем три интерфеса
> 1. Внешний с статическим IP, на него приходят запросы на порт 80
> и 25 которые мне нужны.
> 2. Внутренний интерфейс локальной сети с адресом 192.168.0.254/24
> 3. PPTP интерфейс VPN тунель в сеть физически находящуюся в другом месте.
> Имеет адрес из другой сети 192.168.11.6

то что для интерфейсов туннеля взяли адреса из 192.168.11.0/24 это не очень хорошо, лучше из подсети не пересекающейся с 192.168.11.0/24 и 192.168.0.0/24

>[оверквотинг удален]
> из другой сети. 192.168.11.5->192.168.11.6
> Задача 1: настроить маршрутизацию между двумя сетями без ограничений. Что бы любой
> компьютер из сети с адресом 192.168.0.0/24 мог обращаться к любому компьютеру
> из сети 192.168.11.0/24 без ограничений и любой компьютер из локальной сети
> 192.168.11.0/24 мог обращаться к любому компьютеру из локальной сети 192.168.0.0/24 так
> же без ограничений.
> Маршрутизация, потому что статические маршруты работают быстрее чем нат. ДА и неправильно
> это настраивать нат в интранете.
> Похожие задачи раньше решал на cisco, там между vlan с разными адресными
> пространствами. А теперь вот надо на pf.

по моему в pf нужно только разрешить хождение этого трафика, а в маршрутизацию pf не должен вмешиваться. На Zyxel пишите маршрут к 192.168.11.0/24 через ip vpn-сервера, а на free маршрут к 192.168.0.0/24 через ip vpn-клиента и все. Но из-за того что вы взяли ip для туннеля из 192.168.11.0/24, на free придется указывать не через ip, а через интерфейс. С PPTP такое должно сработать, но лучше измените адреса для туннеля.


>[оверквотинг удален]
> Задача 2: Настроить порт форвардинг приходящего трафика на порты 25 и 80
> маршрутизатора Zyxel на сервер из другой сети с адресом 192.168.11.17.
> На Zyxel порт форвардин настраивается просто. Но тут еще на маршрутизаторе freebsd
> из другой сети надо как то настроить пересылку трафика. У сервера
> с адресом 192.168.11.17 в качестве шлюза указан локальный интерфейс маршрутизатора freebsd
> 192.168.11.254 а маршрутизатор zyxel. Поэтому tcpdump показывает, что до сервера 192.168.11.17
> пакеты доходят, но обратно куда то не туда уходят. Вернее понятно
> куда, они уходят на интерфейс с адресом 192.168.11.254 а вот там
> их как то, с помощью pf надо перенаправить обратно в маршрутизатор
> zyxel в его pptp интерфейс vpn тунеля с адресом 192.168.11.6

как работать с двумя провайдерами разобрались, считайте что vpn туннель это третий провайдер и далее по анологии

> Так вроде понятно? Помогите люди добрые. Запутался уже во всем этом :).


"Статическая маршрутизация между двумя сетями"
Отправлено KomaLex , 12-Май-14 14:04 
> по моему в pf нужно только разрешить хождение этого трафика, а в
> маршрутизацию pf не должен вмешиваться. На Zyxel пишите маршрут к 192.168.11.0/24
> через ip vpn-сервера, а на free маршрут к 192.168.0.0/24 через ip
> vpn-клиента и все. Но из-за того что вы взяли ip для
> туннеля из 192.168.11.0/24, на free придется указывать не через ip, а
> через интерфейс. С PPTP такое должно сработать, но лучше измените адреса
> для туннеля.
> как работать с двумя провайдерами разобрались, считайте что vpn туннель это третий
> провайдер и далее по анологии

Пробовал менять адрес vpn подключения. Результат тот же. Проблема же не в том, что у меня не работает. Сейчас проблема в том, что накладывается какое то ограничение. При увеличении размера ping пакета они перестают проходить. Проверял 32, 64, 128, 256, 512 байт работают без проблем. Пинги не пропадают вообще. За пару минут ни одного не пропала, а вот 1024 уже пропадают, как отрезает. Вернее они вообще не идут. Скорее всего это какие то настройки инкапсуляции или еще чего то.

pf умеет заниматься и маршрутизацией. Стандартный механизм маршрутизации весьма не гибок, умеет разруливать только подсетями.

упростил все до минимума. Убрал PF вообще. разрешил все ото всюду без ограничений. поменял адрес. Теперь на freebsd pf отключен.
#ipfw list


00100 allow ip from any to any
65535 deny ip from any to any

На стороне этой сети больше ничего не настраиваться. Пока хочу настроить доступ из той сети через zyxel в эту сеть. И так упрощенная схема.
конфиг pptp сервера

startup:
        set user komal pass admin
        set console self 127.0.0.1 5005
        set console open
        set web self 0.0.0.0 5006
        set web open
default:
        load pptp_server
pptp_server:
        set ippool add pool1 192.168.23.220 192.168.23.254
        create bundle template B
        set iface enable proxy-arp
        set iface idle 1800
        set iface enable tcpmssfix
        set ipcp yes vjcomp
        set ipcp ranges 192.168.23.1/32 ippool pool1
        set ipcp dns 192.168.23.1
        set bundle enable compression
        set ccp yes mppc
        set mppc yes e40
        set mppc yes e128
        set mppc yes stateless

        create link template L pptp
        set link action bundle B
        set link enable multilink
        set link yes acfcomp protocomp
        set link no pap chap eap
        set link enable chap
        set link keep-alive 10 60
        set link mtu 1460
        set pptp self 192.168.0.11
        set link enable incoming

Адреса немного поменялись, но сути это не меняет.

Сеть 1, где стоит сервер vpn на базе mpd5 имеет адрес 192.168.0.0/24
Сеть 2, откуда надо получить доступ и в которой стоит zyxel kinetic giga 2 192.168.10.0/24
Адрес vpn подключения (как рекомендовали выше) взят из другой подсети.
192.168.23.1->192.168.23.201
на маршрутизаторе zyxel прописан маршрут 192.168.0.0/24 через шлюз 192.168.23.1


"Статическая маршрутизация между двумя сетями"
Отправлено KomaLex , 12-Май-14 15:05 
> Адреса немного поменялись, но сути это не меняет.
> Сеть 1, где стоит сервер vpn на базе mpd5 имеет адрес 192.168.0.0/24
> Сеть 2, откуда надо получить доступ и в которой стоит zyxel kinetic
> giga 2 192.168.10.0/24
> Адрес vpn подключения (как рекомендовали выше) взят из другой подсети.
> 192.168.23.1->192.168.23.201
> на маршрутизаторе zyxel прописан маршрут 192.168.0.0/24 через шлюз 192.168.23.1

Все уже перепробовал. Со стороны freebsd пинг идет нормально. Любого размера пакеты не теряются, а вот со стороны zyxel и сети за ним пинг идет только если размер пакета меньше 512. 512 идет еще без потерь, дальше как отрезает. Там главно настроек то особо нет. Попробовал поиграть с параметром mtu на mpd сервере. Лучше не становится. При уменьшении скажем до 512 максимальный размер проходящего пакета 256, то есть еще снижается.
Подскажите где еще что можно посмотреть?



"Статическая маршрутизация между двумя сетями"
Отправлено KomaLex , 12-Май-14 16:36 
> Все уже перепробовал. Со стороны freebsd пинг идет нормально. Любого размера пакеты
> не теряются, а вот со стороны zyxel и сети за ним
> пинг идет только если размер пакета меньше 512. 512 идет еще
> без потерь, дальше как отрезает. Там главно настроек то особо нет.
> Попробовал поиграть с параметром mtu на mpd сервере. Лучше не становится.
> При уменьшении скажем до 512 максимальный размер проходящего пакета 256, то
> есть еще снижается.
> Подскажите где еще что можно посмотреть?

Обнаружил следующую вещь, этот zyxel пинги размером больше 512 в принципе никуда не пропускает. Даже без этих туннелей. И да бог бы с ними, с пингами. Но проблема в том, что при подключении vpn туннеля через этот zyxel скорость катастрофически падает до 10-15кб, если я подключаю vpn через windows то скорость с того же сервера 500-600кб.
Там стоит samba server Version 3.6.3
Но дело не в самбе, потому что если бы она тормозила то тормозила бы пори любом подключении.
Сталкивался ли кто то с тунелями на этом устройстве?