Сервер VPN для организации телефонной связи удаленного офиса на базе АТС Panasonic TDE100

    Доброе время суток.
    Предлагаю еще одно решение, реализованное мной три месяца назад, и показавшее достаточную эффективность.
    Эта статья предназначена для описания прикладного решения в выбранных условиях. Кроме того, как такового описания как решить мою проблему в одном месте я не нашел, поэтому решение результат поиска информации в различных источниках. Короче говоря, мало ли кому пригодится.
    Итак, имеем:
    Удаленный офис в другом городе, провайдер локальный, выделенного IP нет (назначается по DHCP провайдером).
    Мини — АТС Panasonic KX-TDE100, с включенными лицензиями на внутренние VOIP Телефоны (16 штук) и SIP телефоны (16 штук). Так же в АТС установлены платы аналоговых телефонов 3*16 и на 16 входящих городских линий.
    Телефон KX-NT321, находящийся в удаленном офисе.
    Dlink DIR-300, с зашитым в нем DD-WRT, в удаленном офисе, для подключения к моему серверу VPN.
    Картинка для привлечения внимания:
    image

    Сначала было желание реализовать сервер VPN на шлюзе FreeBSD, установив pptpd. Однако, как оказалось, в FreeBSD нужно патчить систему для поддержки mpd, чего на работающей системе делать совершенно не хотелось почему-то не взлетело.
    Был установлен Ubuntu сервер 13.10. Далее, по порядку без описания своих метаний, приведу результат настройки:
    sudo apt-get update && sudo apt-get upgrade
    sudo apt-get install ppp pptpd
    

    Приведу сетевые интерфейсы сервера:

    ifconfig
    eth0      Link encap:Ethernet  HWaddr 
              inet addr:10.1.1.209  Bcast:10.1.1.255  Mask:255.255.255.0
    
    eth1      Link encap:Ethernet  HWaddr 
              inet addr:10.90.90.9  Bcast:10.90.90.255  Mask:255.255.255.0
    


    eth1 смотрит наружу, eth0 локальная сеть. Адрес Мини-АТС 10.1.1.250.
    Конфигурация pptp сервера в файлах:
    cat pptpd-options
    name pptpd
    refuse-pap
    refuse-chap
    refuse-mschap
    require-mschap-v2
    require-mppe
    ms-dns 8.8.8.8
    nodefaultroute
    lock
    nobsdcomp
    

    Надо сказать, что в конце файла должен быть EOF, иначе служба висит, загружая 99% процессорного времени. EOF это перевод строки и пустота.
    cat chap-secrets
    # Secrets for authentication using CHAP
    # client        server  secret                  IP addresses
    user1 pptpd mysecret 10.1.1.211
    user2 pptpd mysecret 10.1.1.216
    

    В файле жестко указаны IP адреса, однако можно задать назначение адресов автоматом, заменив IP адрес на "*". Кстати, ip-адреса по-незнанию выдал из своей-же сети, однако можно было писать все, что угодно.
    Доступ с Windows к серверу я уже получил, используя белый IP-адрес, а вот с маршрутизатора доступа не было. Путем проб и ошибок был понижен релиз DD-WRT до 14896 (Firmware: DD-WRT v24-sp2 (08/07/10) std). На более высоких версиях не цеплялся ppp.
    Настройка DIR-300:
    1. Закладка Setup — advanced routing — Destination LAN NET 10.1.1.0 Netmask 255.255.255.0 Gateway 10.1.1.209.
    Operating mode — router.
    2. Закладка Basic Setup — Wan Connection — Automatic DHCP (получаем адрес от роутера провайдера)
    3. Network Setup — LAN 192.168.2.1 netmask 255.255.255.0 gateway 192.168.2.1 DNS1 10.1.1.30 (Здесь указан мой сервер DNS в локальной сети моего офиса, в которой установлена мини-АТС). DHCP сервер для подсети 192.168.2.xx настроен на выдачу ip адресов, туда жестко забил привязку 192.168.2.2 к мак-адресу VOIP телефона.
    4. Services — VPN — PPTP-Client включен, указан ip адрес моего сервера, remote subnet 10.1.1.0 netmask 255.255.255.0, и строка инициализации ppp
    mppe required,no40,no56,stateless
    

    5. Services — VPN — PPTP-Client: NAT выключен, вбиты user2 и пароль (то есть при коннекте роутер получает ip-адрес 10.1.1.216.

    В итоге получилось следующее: роутер зацепился к серверу, получил IP-адрес и успешно пинговал 10.1.1.209 ( то есть адрес eth1 сервера). Но дальше дело не шло, а мне необходимо достучаться к 10.1.1.250. Делаем вывод, что проблема в настройке роутинга + некоторых правилах firewall.
    После длительных исследований получился стартовый скрипт (при взлете интерфейса), который я приведу ниже. Ради него эта статья и затевалась:
    cd /etc/ppp/ip-up.d
    cat /etc/ppp/ip-up.d/pppup
    
    #!/bin/bash
    iptables -L -t nat
    iptables -F
    iptables -X
    #Пробросы портов VPN (47 и 1723) 
    iptables -A INPUT -i eth1 -p tcp --dport 47 -j ACCEPT
    iptables -A INPUT -i eth1 -p udp --dport 47 -j ACCEPT
    iptables -A INPUT -i eth1 -p tcp --dport 1723 -j ACCEPT
    iptables -A INPUT -i eth1 -p udp --dport 1723 -j ACCEPT
    #Разрешаем траффик на интерфейсах
    iptables -A FORWARD -o eth0 -p tcp -j ACCEPT
    iptables -A FORWARD -o eth0 -p udp -j ACCEPT
    iptables -A FORWARD -o eth1 -p tcp -j ACCEPT
    iptables -A FORWARD -o eth1 -p udp -j ACCEPT
    iptables -A FORWARD -o ppp0 -p tcp -j ACCEPT
    iptables -A FORWARD -o ppp0 -p udp -j ACCEPT
    iptables -A FORWARD -o ppp1 -p tcp -j ACCEPT
    iptables -A FORWARD -o ppp1 -p udp -j ACCEPT
    iptables -A FORWARD -o ppp2 -p tcp -j ACCEPT
    iptables -A FORWARD -o ppp2 -p tcp -j ACCEPT
    iptables -A FORWARD -o ppp3 -p udp -j ACCEPT
    iptables -A FORWARD -o ppp3 -p tcp -j ACCEPT
    iptables -A FORWARD -o ppp4 -p udp -j ACCEPT
    iptables -A FORWARD -o ppp5 -p udp -j ACCEPT
    #Разрешаем VOIP 
    iptables -t mangle -A FORWARD -p tcp -m tcp --tcp-flags RST,SYN SYN -j TCPMSS --clamp-mss-to-pmtu
    
    #Грохаем устаревший роутинг
    /sbin/route del -net 192.168.0.0 netmask 255.255.255.0
    /sbin/route del -net 192.168.2.0 netmask 255.255.255.0
    /sbin/route del default gw 10.90.90.1
    
    #Восстанавливаем роутинг. (Это для мини-АТС, у которой шлюзом прописан мой сервер 10.1.1.209, чтобы она видела 192.168.2.2). 
    /sbin/route add -net 192.168.2.0 netmask 255.255.255.0 gw 10.1.1.212
    /sbin/route add -net 192.168.0.0 netmask 255.255.255.0 gw 10.1.1.216
    /sbin/route add default gw 10.90.90.1
    
    


    Что касается строчки «Разрешаем VOIP» в стартовом скрипте, то я могу сказать так: нашел ее в выдаче далеко за первой сотней поисковика, в одном из форумов, с пометкой «попробуй, вдруг заработает». До ее введения в конфиг ходил любой траффик за исключением голоса со стороны АТС. Голос из удаленного офиса приходил.
    Спасибо за внимание. Буду рад, если данное решение может помочь быстро взлететь VPN между удаленными офисами.
    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 22

      +1
      #Разрешаем VOIP
      iptables -t mangle -A FORWARD -p tcp -m tcp --tcp-flags RST,SYN SYN -j TCPMSS --clamp-mss-to-pmtu

      не имеет отношения к VOIP напрямую… почитайте на предмет mtu blackhole
      к примеру
      Еще несколько слов о Path MTU Discovery Black Hole
      О PPPoE, MTU и проблеме Path MTU Discovery Black Hole
        +1
        Тогда решение выглядит более универсальным в принципе, для других целей использования VPN.
        0
        Постоянный VPN на базе pptp? Мне прямо вот неудобно как-то уже:

        en.wikipedia.org/wiki/Point-to-Point_Tunneling_Protocol#Security
        security.stackexchange.com/questions/45509/are-there-any-known-vulnerabilities-in-pptp-vpns-when-configured-properly

        Вопрос в том, для чего VPN. Если для безопасности, то вы выбрали не ту технологию, как следует из первых попавшихся ссылок, пару из которых я привел выше.
          0
          сомневаюсь, что те шары и голосовой траффик, которые стали доступны при таком решении, составляют критическую ценность. собственно Vpn применен для удобства и простоты настройки, администрирования, а так же в связи с тем, что другие решения на dir300+ddwrt практически реализовать невозможно, с моей точки зрения
            0
            А почему вы не стали настраивать OpenVPN, например? А если использовать оборудование на Микротик (со стороны точки с динамическим IP), то там можно при смене IP-адреса интерфейса переподнимать туннель автоматом с новыми реквизитами.
              0
              1. было дано задание собрать из наличия
              2. планирую уходить, кадр на замену будет менее квалифицированный
              3. openvpn обслуживает мой офис в части конфиденциальной информации-хранилища ту и чертежей, так что хотел разобраться именно с pptpd
          0
          >Сначала было желание реализовать сервер VPN на шлюзе FreeBSD, установив pptpd. Однако, как оказалось, в FreeBSD нужно патчить систему для поддержки mpd

          простите, а что там патчить?
            0
            Вот тут у Лиссяры написано как патчить mpd5. Про pptpd во freebsd 9 вычитал на том же ресурсе, что лучше не надо. Попробовал раз взлететь, не вышло. Поэтому оставил эту тему. Но там еще вопрос безопасности сыграл свою роль. Со шлюза больше шар доступно, бекапы (которые вне локальной подсети). Поэтому не стал к шлюзу давать доступ из — вне.
              0
              Ничего там не патчат. Всё устанавливается по стандартной схеме. Настраиваются конфиги. Разве что только включают PF в ядре. Если у вас что-то другое используется, то смотрите как там NAT сделать, если он, то ничего не нужно пересобирать.
                0
                Да уж и не надо, на убунте работает. FreeBSD балансирует каналы, раздает ip — адреса, является сервером NS. Могу сослаться на работающее решение балансировки нескольких каналов на базе PF.
                  0
                  Я раньше использовал FreeBSD и как раз с PF. Но сейчас как-то неудобно стало. Да и софт больше под Linux развивается. Думаю вы ничего не потеряли.
                  Но в инструкции всё-таки патчить ядро под MPD не нужно :-)
                    0
                    С планшета смотрел. Не нужно, так и не нужно. В любом случае не взлетело, а на рабочей ОС экспериментировать что-то не захотелось.
                    К FreeBSD отношусь с большИм уважением, нежели к linux. Может быть процесс запуска колхоза, сборки из сорцов и сложнее, чем установка из репозиториев, однако на этапе сборки системы становится понятно как это все связано и функционирует. Работа на мой взгляд чуть быстрее и чуть стабильнее, следовательно чуть прозрачнее и запущенный сервис в целом. На ubuntu/debian?centos пересел в связи с:
                    1) На дешевые VPS сложно поставить FreeBSD;
                    2) CentOS у клиента, которого обслуживаю, сайты держит
                    3) ProxMox на Debian, пришлось разобраться когда ферму для биткойнов на нем делал.
                      0
                      А я Gentoo дома сейчас использую. Не понимаю, как раньше портами мог пользоваться на FreeBSD :) Жуть как не продумано.
                0
                как уже сказали, ничего там не патчат. не знаю, что у вас там не взлетело, но pptp на mpd поднимается максимум за 10 минут.
                но я бы выбрал l2tp из-за отсутствия проблем с nat.
                  0
                  Не уверен, что вопрос в тему, однако l2tp заработает ли в связке с DD-WRT?
              0
              >Что касается строчки «Разрешаем VOIP» в стартовом скрипте, то я могу сказать так: нашел ее в выдаче далеко за первой сотней поисковика, в одном из форумов, с пометкой «попробуй, вдруг заработает». До ее введения в конфиг ходил любой траффик за исключением голоса со стороны АТС.

              голос бегает по rtp, который представляет собой пакетики udp. у правила же match-условие — tcp, так что оно на голос никак не влияет.

              >/sbin/route del -net 192.168.0.0 netmask 255.255.255.0

              используйте iproute2. и я бы вообще весь впн вынес в отдельную таблицу роутинга(а лучше вообще неймспейс).
                0
                Согласен с вышеприведенным.
                и я бы вообще весь впн вынес в отдельную таблицу роутинга(а лучше вообще неймспейс).

                Не стал делать ибо работает так, а задачи разбираться с iproute2 и прочим не стоит (не заплатят, не оценят)
                однако проблемы, с которыми я столкнулся при настройке роутинга в следующем — если я задаю правила при старте системы, а входящие интерфейсы еще не подняты, то правила роутинга не работают (привязываются к eth0).
                голос бегает по rtp, который представляет собой пакетики udp. у правила же match-условие — tcp, так что оно на голос никак не влияет.

                видимо влияет mtu blackhole все-таки на траффик, а не невозможность прогона через систему именно rtp. Поэтому закомментил себе эту строчку именно так.
                  0
                  >Не стал делать ибо работает так, а задачи разбираться с iproute2 и прочим не стоит (не заплатят, не оценят)

                  дело не в «заплатят/оценят», а знаниях в вашей голове и том факте, что net-tools(в которые входят ifconfig/route/netstat) уже давно depracated.

                  собственно, ваши проблемы с настройкой роутинга как раз с этим и связаны.

                  >видимо влияет mtu blackhole все-таки на траффик

                  не влияет. более того, глядя на ваш /etc/ppp/ip-up.d/pppup хочется рыдать.

                  cd /etc/ppp/ip-up.d
                  cat /etc/ppp/ip-up.d/pppup

                  зачем cd, если вы используете абсолютный путь?
                  но это мелочи.

                  iptables -L -t nat

                  вывели в stdout содержимое таблички nat. оок. но зачем?

                  iptables -F

                  в этот момент всё содержимое таблички filter исчезло. если у нас там были какие-то полезные правила — всё, их нет.
                  если у того, кто попробует поднять по вашей статье дефолтная политика DROP, то он лишится ssh доступа к машине.

                  iptables -X

                  зачем?

                  iptables -A INPUT -i eth1 -p tcp --dport 47 -j ACCEPT
                  iptables -A INPUT -i eth1 -p udp --dport 47 -j ACCEPT

                  зачем?

                  #Разрешаем траффик на интерфейсах

                  зачем прописывать 100500 интерфейсов, особенно в таком стиле?

                  P.S.: пожалуйста, не пишите больше статей по сетям без понимания происходящего и того, как работают используемые вами инструменты.
                    0
                    зачем cd, если вы используете абсолютный путь?
                    но это мелочи.

                    Чтобы показать в статье где что лежит.
                    iptables -A INPUT -i eth1 -p tcp --dport 47 -j ACCEPT
                    iptables -A INPUT -i eth1 -p udp --dport 47 -j ACCEPT

                    зачем?

                    Порт pppoe, через который идет согласование.

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

                    Решение предназначено больше для использования внутри жестко определенных рамок, а не для авторизации кучи пользователей. Всего пользователей 3, соответственно и правила прописаны для максимально возможного количества поднятых интерфейсов.
                    вывели в stdout содержимое таблички nat. оок. но зачем?

                    Отладочная инфа. Пардоньте, забыл удалить.
                    если у того, кто попробует поднять по вашей статье дефолтная политика DROP, то он лишится ssh доступа к машине.

                    не факт.

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

                    Обязуюсь прекратить писать статьи на Хабре, когда увижу от Вас статью о решении аналогичной проблемы, с учетом Ваших комментариев к моей
                      0
                      Порт pppoe, через который идет согласование.

                      в PPPoE нет портов. и вы настраиваете pptp, а не pppoe.
                      у pptp только 1 порт используется — 1723. число 47 — это скорее про gre в поле protocol number

                      но это опять же про ip, а не tcp или udp.

                      P.S. Когда Вы напишете статью о аналогичном решении, соблюдая Ваши правила, обязуюсь прекратить писать свои решения на хабре.


                      тюю…
                      l2 vpn с vlan'ми на vtun
                      l2 vpn с vlan'ми на l2tpv3 pseudowire
                      network namespaces
                      QinQ в linux

                      Всего пользователей 3, соответственно и правила прописаны для максимально возможного количества поднятых интерфейсов.


                      а зачем? у вас адреса клиентов гвоздями прибиты, достаточно было разрешить 10.1.1/24

                      не факт.


                      факт. сделайте сидя по ssh:

                      iptables -A INPUT -p tcp --dport 22 -j ACCEPT
                      iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
                      iptables -P INPUT DROP
                      iptables -P OUTPUT DROP
                      iptables -F
                        0
                        тюю…
                        l2 vpn с vlan'ми на vtun
                        l2 vpn с vlan'ми на l2tpv3 pseudowire
                        network namespaces
                        QinQ в linux

                        Ваше?
                        Где там про DD-WRT или аналогичное решение про подключение телефона KX-NT321 к офисной АТС с помощью этого решения с использованием предложенного роутера DIR-300 или без него?
                        iptables -A INPUT -p tcp --dport 22 -j ACCEPT
                        iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
                        iptables -P INPUT DROP
                        iptables -P OUTPUT DROP
                        iptables -F

                        Зачем мне это делать, если я делаю то, что описано в статье и ssh не отваливается? Пусть даже Вы утверждаете обратное.
                        и вы настраиваете pptp, а не pppoe.
                        у pptp только 1 порт используется — 1723. число 47 — это скорее про gre в поле protocol number

                        Да, это gre. При настройке pptpd в любом случае необходимо дать доступ к этому порту:
                        iptables -A INPUT -i eth1 -p tcp --dport 47 -j ACCEPT
                        iptables -A INPUT -i eth1 -p udp --dport 47 -j ACCEPT
                        

                        иначе логин не проходит.
                          0
                          а покажите пожалуйста на системе с pptpd netstat -lpnt | grep 47

              Only users with full accounts can post comments. Log in, please.