The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Nat для openvpn(tun) клиентов средствами PF"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [ Отслеживать ]

"Nat для openvpn(tun) клиентов средствами PF"  
Сообщение от netc (ok) on 20-Апр-09, 10:54 
Подскажите как сделать?

Есть сервер с pf:

FreeBSD proxy.energopolus0.local 7.1-RELEASE FreeBSD 7.1-RELEASE #1: Wed Apr 15 13:27:56 MSD 2009     root@proxy.energopolus0.local:/usr/obj/usr/src/sys/GENERIC-with-pf-altq-with-netgraph  i386

С интерфейсами:

$ext_if="80.68.XX.XX"
$int_if="192.168.0.5"

Стоит на нем openvpn и смотрит в инет с public ip.

Клиенты соединяються, но видят только сам сервер. С помощью tcpdump было выявлено, что   пакеты от клиентов выходят на внутреннем интерфейсе сервера($int_if), но ответа не получают, т.к. они выходят с ip-ами из приватной сети openvpn (10.10.200.0)

Поэтому возникает два варианта рещения данной проблемы:

1. Установить шлюз по умолчанию ($int_if) на компьютерах в сети (192.168.0.0). И никаких правил для nat не надо. Работает проверял.

2. Если нет возможности (ну у меня например нет) на компьютере в локальной сети (192.168.0.0) изменить шлюз по умолчанию, следовательно нужно использовать nat на выходе пакетов от клиентов openvpn в локальную сеть.
Как это сделать (какие правила нужно прописать на шлюзе)?

пробывал такое не помогает ;(
nat on $int_if from $openvpn_network to $trusted_lan -> ($int_if)

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Nat для openvpn(tun) клиентов средствами PF"  
Сообщение от reader (ok) on 20-Апр-09, 11:08 
>[оверквотинг удален]
>
>Клиенты соединяються, но видят только сам сервер. С помощью tcpdump было выявлено,
>что   пакеты от клиентов выходят на внутреннем интерфейсе сервера($int_if),
>но ответа не получают, т.к. они выходят с ip-ами из приватной
>сети openvpn (10.10.200.0)
>
>Поэтому возникает два варианта рещения данной проблемы:
>
>1. Установить шлюз по умолчанию ($int_if) на компьютерах в сети (192.168.0.0). И
>никаких правил для nat не надо. Работает проверял.

или в локальной сети прописать маршрут к 10.10.200.0 подсети через 192.168.0.5
>
>2. Если нет возможности (ну у меня например нет) на компьютере в
>локальной сети (192.168.0.0) изменить шлюз по умолчанию, следовательно нужно использовать nat
>на выходе пакетов от клиентов openvpn в локальную сеть.
>Как это сделать (какие правила нужно прописать на шлюзе)?
>
>пробывал такое не помогает ;(
>nat on $int_if from $openvpn_network to $trusted_lan -> ($int_if)

правила фильтров тоже имеют значение

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Nat для openvpn(tun) клиентов средствами PF"  
Сообщение от netc (ok) on 20-Апр-09, 11:42 
>[оверквотинг удален]
>>
>>2. Если нет возможности (ну у меня например нет) на компьютере в
>>локальной сети (192.168.0.0) изменить шлюз по умолчанию, следовательно нужно использовать nat
>>на выходе пакетов от клиентов openvpn в локальную сеть.
>>Как это сделать (какие правила нужно прописать на шлюзе)?
>>
>>пробывал такое не помогает ;(
>>nat on $int_if from $openvpn_network to $trusted_lan -> ($int_if)
>
>правила фильтров тоже имеют значение

я понимаю ну вроде как сделал уже:

set skip on $tun_for_openvpn_client
set skip on $int_if

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Nat для openvpn(tun) клиентов средствами PF"  
Сообщение от netc (ok) on 20-Апр-09, 11:42 
в вообще правило, для nat я правильное написал ?
должно работать ?
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Nat для openvpn(tun) клиентов средствами PF"  
Сообщение от reader (ok) on 20-Апр-09, 12:08 
>в вообще правило, для nat я правильное написал ?
>должно работать ?

похоже на правильное, только что в переменных мне не известно.
выполните pfctl -sn и увидите во что развернулась запись, и сравните с тем что вы хотели

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Nat для openvpn(tun) клиентов средствами PF"  
Сообщение от netc (??) on 23-Апр-09, 13:36 
Отписываюсь как решил задачу. Другим будет легче

Пробросы делаю так (сложно, потому,что не зависит от шлюза у клиентов)


##################################
## Пробросы

        # Далее после проброса используем nat чтобы не зависеть от того, какой основной шлюз
        # стоит у серверов внутри сети

        # проброс порта RDP-3389 на ironws
        rdr on $ext_if proto tcp from any to $ext_if port 3389 -> $ironws port 3389
                # Добавим преобразование на int_if, у пакетов идущих к $tcserv меняем исх. ip на адрес внутр.инт.шлюза
                # Без этого нижнего правило редирект будет работать, только если у компьютера на который переадресуем
                # в качестве шлюза по умолч. выставлен внутр.инт.шлюза(int_if)
                nat on $int_if proto tcp from any to $ironws port 3389 -> $int_if

        # проброс порта Radmin-4899 на ironws
        rdr on $ext_if proto tcp from any to $ext_if port 4899 -> $ironws port 4899
                # см. выше
                nat on $int_if proto tcp from any to $ironws port 4899 -> $int_if

        # проброс порта RDP-3390 на tcserv
        rdr on $ext_if proto tcp from any to $ext_if port 3390 -> $tcserv port 3389

                # см. выше
                # if 3389 nmap -P0 80.68.11.203 out 3390 open - WORK 100%
                # if 3390 nmap -P0 80.68.11.203 out 3390 filtered unknow - DONt'WORK
                # поэтому используем порт 3389. => нат срабатывает после rdr
                nat on $int_if proto tcp from any to $tcserv port 3389 -> $int_if

        # проброс порта RDP-3391 на astalavista
        rdr on $ext_if proto tcp from any to $ext_if port 3391 -> $astalavistaws port 3389

                # см. выше
                # if 3389 nmap -P0 80.68.11.203 out 3390 open - WORK 100%
                # if 3390 nmap -P0 80.68.11.203 out 3390 filtered unknow - DONt'WORK
                # поэтому используем порт 3389. => нат срабатывает после rdr
                nat on $int_if proto tcp from any to $astalavistaws port 3389 -> $int_if


# Бинат конечно работает Оставим на всякий если понадобиться сделать быстро проброс и машина на которую
# будет делаться проброс будет иметь осно-ым шлюзом внутр. инт. этого шлюза
#       binat on $ext_if from $tcserv to $ext_if -> $ext_if


## Пробросы
#############################

А вот так еще и надо впустить и выпустить:

##############################################################################
##### - Фильтрация-разрешения для трафика по проброшенным портам - ###########

######### !!! Если написать эти правила сразу после rdr они вообще игнорируються.

        # впускаем на внешнем. к $ironws. Причем странно, но надо
        # писать именно к $tcserv а не $ext_if. работает только так ;(
        # 5/300 не более 5 соединенией за 5 минут
        pass in on $ext_if proto tcp from any to $ironws port 3389 synproxy state ( max-src-conn-rate 5/300, overload <BRUTERDP> flush global )
                # выпускаем на внутр. к $ironws
                pass out on $int_if proto tcp from any to $ironws port 3389

        # впускаем на внешнем. к $ironws. Причем странно, но надо
        # писать именно к $ironws а не $ext_if. работает только так ;(
        pass in on $ext_if proto tcp from any to $ironws port 4899 synproxy state ( max-src-conn-rate 5/300, overload <BRUTERADMIN> flush global )
                # выпускаем на внутр. к $ironws
                pass out on $int_if proto tcp from any to $ironws port 4899


        # впускаем на внешнем. к $tcserv. Причем странно, но надо
        # писать именно к $tcserv а не $ext_if. работает только так ;(
        pass in on $ext_if proto tcp from any to $tcserv port 3389 synproxy state ( max-src-conn-rate 5/300, overload <BRUTERDP> flush global )
                pass out on $int_if proto tcp from any to $tcserv port 3389

        # впускаем на внешнем. к $astalavistaws. Причем странно, но надо
        # писать именно к $astalavistaws а не $ext_if. работает только так ;(
        pass in on $ext_if proto tcp from any to $astalavistaws port 3389 synproxy state ( max-src-conn-rate 5/300, overload <BRUTERDP> flush global )
                pass out on $int_if proto tcp from any to $astalavistaws port 3389


Заметьте, что если делать проброс с порта отличного от того на который приходят соединения, то нужно учитывать некоторые моменты

Вообще при пробросе на $astalavistaws все видно ;)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Nat для openvpn(tun) клиентов средствами PF"  
Сообщение от netc (??) on 23-Апр-09, 13:40 
только вот у меня возникает вопрос

почему? я должен писать после

правило № 1
pass in on $ext_if proto tcp from any to $ironws port 3389 synproxy state ( max-src-conn-rate 5/300, overload <BRUTERDP> flush global )

вот это:

правило № 2 # выпускаем на внутр. к $ironws
pass out on $int_if proto tcp from any to $ironws port 4899


почему если я напишу вверху set skip on $int_if
это не освобождает меня от правила номер 2.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру