Open VPN: проблемы с маршрутизацией

Тема в разделе "Десктопный Linux", создана пользователем past0r, 31 мар 2009.

Статус темы:
Закрыта.
Модераторы: Цукер
  1. past0r

    past0r Постоялец

    Регистр.:
    3 ноя 2008
    Сообщения:
    92
    Симпатии:
    7
    router office-1 router office-2
    router VPN Server router VPN Client
    LAN-1 ------| eth0 tap0 | --------- VPN ---------- | tap0 eth0 | ------ LAN-2
    eth1 | --Inet Inet-- | eth1


    LAN-1 = eth0 = 192.168.100.1/24
    LAN-2 = eth0 = 192.168.150.1/24
    VPN = tap0 = 192.168.200/24

    Версия OpenVPN: 2.1_rc11 i486-pc-linux-gnu [SSL] [LZO2] [EPOLL] [PKCS11] built on Sep 18 2008




    Параметры роутера с сервером OpenVPN
    Версия OpenVPN: 2.1_rc11 i486-pc-linux-gnu [SSL] [LZO2] [EPOLL] [PKCS11] built on Sep 18 2008

    VPN Server Config
    ---------------------
    iGate:~# cat /etc/openvpn/server.conf
    mode server
    tls-server
    daemon

    ifconfig 192.168.200.1 255.255.255.0

    port 1194
    proto tcp-server
    dev tap0

    ca /root/openvpn/keys/ca.crt
    cert /root/openvpn/keys/iGate.crt
    key /root/openvpn/keys/iGate.key # This file should be kept secret
    dh /root/openvpn/keys/dh1024.pem

    client-config-dir /etc/openvpn/ccd
    route 192.168.150.0 255.255.255.0 192.168.200.1
    keepalive 10 120
    client-to-client
    comp-lzo
    persist-key
    persist-tun
    verb 9
    log-append /var/log/openvpn.log
    ---------------------

    в /etc/openvpn/ccd находится 1 файл
    ---------------------
    iGate:/etc/openvpn/ccd# cat NTagil
    # приcваиваем ip-адрес
    ifconfig-push 192.168.200.2 255.255.255.0

    # роутинг на сети центрального офиса
    push "route 192.168.100.0 255.255.255.0 192.168.200.1"
    ---------------------

    кусочек конфига фаервола
    ---------------------
    echo 1 > /proc/sys/net/ipv4/ip_forward
    ipt="/sbin/iptables"

    $ipt -v -A INPUT -i tun+ -j ACCEPT
    $ipt -v -A OUTPUT -o tun+ -j ACCEPT
    $ipt -A FORWARD -i tun+ -j ACCEPT
    $ipt -A FORWARD -o tun+ -j ACCEP
    ---------------------

    Таблица маршрутов:
    ---------------------
    iGate:/etc/openvpn/ccd# route
    Kernel IP routing table
    Destination Gateway Genmask Flags Metric Ref Use Iface
    217.199.246.12 * 255.255.255.252 U 0 0 0 eth1
    localnet * 255.255.255.0 U 0 0 0 eth0
    192.168.150.0 192.168.200.2 255.255.255.0 UG 0 0 0 tap0
    192.168.200.0 * 255.255.255.0 U 0 0 0 tap0
    default XXX.XXX.XXX.XX 0.0.0.0 UG 0 0 0 eth1
    ---------------------




    Конфа Роутера в филиале
    Версия OpenVPN: 2.1_rc11 i486-pc-linux-gnu [SSL] [LZO2] [EPOLL] [PKCS11] built on Sep 18 2008

    Client config
    ---------------------
    tgate:~/net# cat /etc/openvpn/client.conf
    client
    dev tap0
    proto tcp


    # адрес сервера в центрально офисе
    remote XXX.XXX.XXX.XXX 1194
    resolv-retry infinite
    nobind
    persist-key
    persist-tun
    comp-lzo
    ns-cert-type server
    ca /root/openvpn/keys/ca.crt
    cert /root/openvpn/keys/ekb.crt
    key /root/openvpn/keys/ekb.key
    log-append /var/log/openvpn.log
    status /var/log/openvpn/openvpn-status.log
    ---------------------

    кусочек конфига фаервола
    ---------------------
    echo 1 > /proc/sys/net/ipv4/ip_forward
    ipt="/sbin/iptables"

    $ipt -v -A INPUT -i tun+ -j ACCEPT
    $ipt -v -A OUTPUT -o tun+ -j ACCEPT
    $ipt -A FORWARD -i tun+ -j ACCEPT
    $ipt -A FORWARD -o tun+ -j ACCEP
    ---------------------


    Таблица маршрутов:
    ---------------------
    tgate:~/net# route
    Kernel IP routing table
    Destination Gateway Genmask Flags Metric Ref Use Iface
    93.95.168.96 * 255.255.255.252 U 0 0 0 eth1
    192.168.100.0 192.168.200.1 255.255.255.0 UG 0 0 0 tap0
    192.168.150.0 * 255.255.255.0 U 0 0 0 eth0
    192.168.200.0 * 255.255.255.0 U 0 0 0 tap0
    default XXX.XXX.XXX.XXX 0.0.0.0 UG 0 0 0 eth1
    ---------------------


    История такая:

    OpenVPN работает. Роутеры друг друга пингуют.
    С роутера филиала (office-2) можно пропиновать ВСЮ локальную сеть центрального офиса LAN-1, а из локальной сети филиала (LAN-2) не пингуется ни роутер, ни локальная сеть.
    И локальной сети центрально офиса можно пинговать роутер филиала, а дальше уже не идет.

    В Чем может быть загвоздка, я уже голову всю сломал! Ж(

    Проблема не в openvpn. Он работает стабильно, по какой то причине не порпрасываются пакеты между интерфейсами. на рутере удаленного подразделения, в чем может быть проблема, если форвардинг включен
     
  2. xatop

    xatop

    Регистр.:
    20 фев 2009
    Сообщения:
    163
    Симпатии:
    29
    allow tcp from me to [vpn server] dst-port 1723 out
    allow tcp from [vpn server] 1723 to me in
     
  3. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    591
    Ты уверен что
    и
    это нормально?
     
  4. xatop

    xatop

    Регистр.:
    20 фев 2009
    Сообщения:
    163
    Симпатии:
    29
    Рискну слегка - может давно юзаете

    но мне это решение очень нравится:

    Соединяем две ethernet сетки чтобы они видели друг друга
    как будто находятся в одному коммутаторе.

    Делать будем на основе ядерного netgraph,
    в частности модули ng_ether и ng_bridge.

    Добавляем в /boot/loader.conf

    netgraph_load="YES"
    ng_ether_load="YES"
    ng_bridge_load="YES"

    Есть 2 варианта работы системы

    1. Без модуля ng_bridge.
    Мы получим как бы объединение сетевых интерфейсов в один невидимый.
    Сами сервера с этими интерфейсами не будут видеть трафик на них.
    Получается прозрачное соединение как будто между сетями
    протянули физический кабель.
    Весь трафик приходящий на интерфейс одного из серверов
    будет прозрачно проходить на другой.

    2. С модулем ng_bridge.
    Мы получим как бы включение интерфейсов на обоих серверах в один свитч.
    Сервера будут видеть трафик на интерфейсах.
    Трафик не предназначеный для соседней
    сети не пойдет по каналу (реализация обычного свитча).


    Конфигурация:

    Имеем два типичных роутера.

    1.
    Два сетевых интерфейса
    fxp0 - белый интернет адрес для примера 1.1.1.1
    fxp1 - серый локальный адрес 192.168.0.1

    2.
    Два сетевых интерфейса
    fxp0 - белый интернет адрес для примера 1.1.1.2
    fxp1 - серый локальный адрес 192.168.0.2

    При загрузке модуля ng_ether на обоих роутерах в netgraph
    атоматически были созданы узлы с названием сетевых карт.

    lmik# ngctl list
    There are 3 total nodes:
    Name: ngctl3178 Type: socket ID: 00000009 Num hooks: 0
    Name: fxp0 Type: ether ID: 00000001 Num hooks: 0
    Name: fxp1 Type: ether ID: 00000002 Num hooks

    Вариант №1 непрактичный и рассматривать его не будем,
    просто напишу конфигурацию графов вдруг кому-то понадобится.

    ngctl mkpeer fxp0 ksocket lower inet/dgram/udp
    ngctl msg switch:link1 bind inet/1.1.1.1:1234
    ngctl msg switch:link1 connect inet/1.1.1.2:1234
    ngctl msg fxp1: setpromisc 1
    ngctl msg fxp1: setautosrc 0

    Вариант №2

    На первом сервере конфигурация нетграфов будет выглядеть так:

    #Создаем узел bridge и подключаем к его хуку link0 физический (нижний) уровень fxp1
    ngctl mkpeer fxp1: bridge lower link0
    #назовем этот узел switch
    ngctl name fxp1:lower switch
    #создадим узел ksocket и подсоединим его хуком inet/dgram/udp к хуку link1 нашего switch
    ngctl mkpeer switch: ksocket link1 inet/dgram/udp
    #Отправляем сообщение узлу switch:link1 (туда подключен узел ksocket)
    #чтобы тот забиндил сокет для входящего трафика на нашем внешнем IP
    ngctl msg switch:link1 bind inet/1.1.1.1:1234
    #Отправляем команду узлу switch:link1 (туда подключен узел ksocket)
    #чтобы тот соединился со вторым сервером
    ngctl msg switch:link1 connect inet/1.1.1.2:1234
    #Соединяем хук link2 нашего switch с верхним уровнем интерфейса fxp1
    #т.е подключаем наш сервер в наш виртуальный свитч.
    ngctl connect switch: fxp1: link2 upper
    #включаем на сетевой карте прослушку всех пакетов,
    #а не только тех что предназначаются ей.
    ngctl msg fxp1: setpromisc 1
    ngctl msg fxp1: setautosrc 0

    На втором нужно изменить строчки:

    ngctl msg switch:link1 bind inet/1.1.1.2:1234
    ngctl msg switch:link1 connect inet/1.1.1.1:1234

    Просто поменять местами адреса.

    Для красоты оформляем запуск нашего виртуалсвитча в скрипт
    и при желании кладем в /usr/local/etc/rc.d

    #!/bin/sh

    #тут указываем наш белый адрес
    self=1.1.1.1
    peer=1.1.1.2
    #тут порт по которому будет бегать трафик
    port=1234
    #интерфейс который включаем в свитч
    if=fxp1
    case "$1" in
    start)
    echo "Starting netgraph switch."
    ngctl mkpeer ${if}: bridge lower link0
    ngctl name ${if}:lower switch
    ngctl mkpeer switch: ksocket link1 inet/dgram/udp
    ngctl msg switch:link1 bind inet/${self}:${port}
    ngctl msg switch:link1 connect inet/${peer}:${port}
    ngctl connect switch: ${if}: link2 upper
    ngctl msg ${if}: setpromisc 1
    ngctl msg ${if}: setautosrc 0
    echo "Ok."
    exit 0
    ;;
    stop)
    echo "Stopping netgraph switch."
    /usr/sbin/ngctl shutdown ${if}:
    /usr/sbin/ngctl shutdown switch:
    echo "Ok."

    exit 0
    ;;
    restart)
    sh $0 stop
    sh $0 start
    ;;
    *)
    echo "Usage: `basename $0` { start | stop | restart }"
    exit 64
    ;;
    esac

    Красота какая, никаких впн крутить не надо, просто запустить скрипт,
    никаких реконектов и т.п...



    Ссылка на обсуждение: http://forum.lissyara.su/viewtopic.php?t=9136.
     
  5. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    591
    Красиво, только от необходимости в VPN это не спасает.
     
  6. xatop

    xatop

    Регистр.:
    20 фев 2009
    Сообщения:
    163
    Симпатии:
    29
    с чуть большими заморами в конфиах запускается связка с шифрованием траффика.
     
  7. past0r

    past0r Постоялец

    Регистр.:
    3 ноя 2008
    Сообщения:
    92
    Симпатии:
    7
    Опытным путем выяснил, что между собой не общаются tap0 и eth0 на втором шлюзе, который находится в удаленном подразделении.

    ip_forward = 1

    в чем может быть проблема?
     
  8. xatop

    xatop

    Регистр.:
    20 фев 2009
    Сообщения:
    163
    Симпатии:
    29
    вот так и хочется сказать: ы жедезе!
    Но пока не говорю, спрашиваю: что там за шелезяго?
     
  9. past0r

    past0r Постоялец

    Регистр.:
    3 ноя 2008
    Сообщения:
    92
    Симпатии:
    7
    Что именно интересует? Железка старая, очень!
     
  10. xatop

    xatop

    Регистр.:
    20 фев 2009
    Сообщения:
    163
    Симпатии:
    29
    вот и попробуй сменить, не поможет - будем думать дальше.
     
Статус темы:
Закрыта.