Vyatta pptp-server – MikroTik pptp-client

Vyatta pptp-server – MikroTik pptp-client

vyatta open source router

mikrotik logo

Наскоро попаднах в следната ситуация която мисля, че трябва да опиша.

Немалка фирма която има разпръснати обекти в северна България по голямата част от които са на полето решава, че трябва да постави камери и да ги наблюдава централизирано. Това всъщност се оказва не лека задача защото достъпа до бърз Интернет в някаква долина където най близкото село е на 10 километра се доставя или със страшно много пари или с компромис който естествено изключва мобилен Интернет тип “флашка”.

Според мен фирмата все пак е постъпила адекватно като е обявила търг с очаквано готово решение от съответен доставчик на такива услуги. Най икомическо а сякаш и техническо обосновано речение е двупосочен сателитен Интернет. Търга е спечелен, сателитните модеми са монтирани и идва ред на камерите за наблюдение.

Тук идва друга фирма която е с основна дейност монтаж и поддръжка на видеонаблюдение която оглежда обектите и според мен също е постъпила правилно като поставя по една 360 градусова ИП камера която през определен период от време сменя позицията си. Решението е добро защото трафика през сателита е меко казано oграничен 2Mbits upload и 6Mbits download да не говорим, че latency от ping не пада под 700 милисекунди. Така вместо да се монтира по няколко камери на обект с DVR (digital video recorder) ще има по една камера а там където ще се извършва централизираното наблюдение ще има монтиран NVR (network video recorder) който ще ги обединява в един интерфейс и ще прави архивен запис.

До тук всичко звучи добре но се оказва, че Интернет доставчика не е включил в офертата си публични ип адреси а и самата топология на сателитната мрежа се оказа малко странна. DHCP server раздава ИП адреси на обектите но те дефакто не са видими за света. Как тогава ще има достъп до ИП камерите NVR-a ?

Естествено решението е VPN. В центалния офис замених текущия рутер с Vyatta но на обектите не можех да си го позволя защото комуникационите шкафове бяха по малки от стар мини хладилник МРАЗ и в тях бяха напъхани вече разни неща като сателитните модеми, UPS, разсклонители, захранване за камерите и по няколко метра кабели. В такава ситуация нищо не може да замени MikroTik 750 (малко по голям от кутия цигари а върши толкова полезни неща)

И така, топологията на нашата мрежа:
IPCAM => MikroTik => Satelite => Internet => Vyatta => NVR
Ще започнем с Vyatta тъй като тя е в центъра на събитията и се намира в централата на фирмата. Зад Vyatta в локалната мрежа има NVR – той трябва да се свърже с камерите по обектите. За целта на всеки обект ще инсталираме MikroTik зад който ще е камерата а Vyatta ще се свърже с него с VPN.

+-----+
| NVR |
+-----+
192.168.2.244
   |+
192.168.2.1
+--------+
| Vyatta |++++++ VPN server 10.255.254.0
+--------+ 
93.155.130.58               +
    |                       +
/--------\                  +
|INTERNET|                  +
\--------/                  +
    |                       +
   DHCP                     +
+----------+                +
| MikroTik |++++++ VPN client 172.16.100.1
+----------+
192.168.100.1
    |+
192.168.100.150
+---------+
|  IPCAM  |
+---------+

Конфигурацията на Vyatta

 

interfaces {
    ethernet eth0 {
        address 93.155.130.58/29
        description "WAN"
        duplex auto
        hw-id 00:30:05:3e:50:66
        smp_affinity auto
        speed auto
    }
    ethernet eth1 {
        address 192.168.2.1/24
        address 192.168.3.1/24
        description "LAN"
        duplex auto
        hw-id 4c:00:10:54:7b:e8
        smp_affinity auto
        speed auto
    }
    ethernet eth2 {
        address 192.168.1.2/30
        description "WAN2"
        duplex auto
        hw-id 4c:00:10:54:8a:05
        smp_affinity auto
        speed auto
    }
    ethernet eth3 {
        duplex auto
        hw-id 00:19:e0:7a:4a:f9
        smp_affinity auto
        speed auto
    }
    loopback lo {
    }
}
nat {
    destination {
        rule 10 {
            destination {
                address 93.155.130.58
                port 10000
            }
            inbound-interface eth0
            protocol tcp
            translation {
                address 192.168.2.244
                port 80
            }
        }
        rule 11 {
            destination {
                address 93.155.130.58
                port 9877
            }
            inbound-interface eth0
            protocol tcp
            translation {
                address 192.168.2.244
                port 9877
            }
        }
        rule 12 {
            destination {
                address 93.155.130.58
                port 9999
            }
            inbound-interface eth0
            protocol tcp
            translation {
                address 192.168.2.254
                port 80
            }
        }
        rule 13 {
            destination {
                address 93.155.130.58
                port 667
            }
            inbound-interface eth0
            protocol tcp
            translation {
                address 192.168.2.254
                port 667
            }
        }
    }
    source {
        rule 10 {
            outbound-interface eth0
            source {
                address 192.168.0.0/16
            }
            translation {
                address 93.155.130.58
            }
        }
        rule 11 {
            outbound-interface eth2
            source {
                address 192.168.0.0/16
            }
            translation {
                address 192.168.1.2
            }
        }
    }
}
protocols {
    static {
        route 0.0.0.0/0 {
            next-hop 93.155.130.1 {
            }
            next-hop 192.168.1.1 {
                distance 2
            }
        }
        route 192.168.100.0/24 {
            next-hop 172.16.100.1 {
            }
        }
        route 192.168.102.0/24 {
            next-hop 172.16.100.2 {
            }
        }
        route 192.168.103.0/24 {
            next-hop 172.16.100.3 {
            }
        }
        route 192.168.104.0/24 {
            next-hop 172.16.100.4 {
            }
        }
        route 192.168.105.0/24 {
            next-hop 172.16.100.5 {
            }
        }
    }
}
service {
    dhcp-server {
        disabled false
        shared-network-name ITSERVICE1 {
            authoritative disable
            subnet 192.168.2.0/24 {
                default-router 192.168.2.1
                dns-server 192.168.2.1
                domain-name itservice-bg.net
                lease 86400
                start 192.168.2.10 {
                    stop 192.168.2.254
                }
            }
        }
    }
    dns {
        forwarding {
            cache-size 150
            listen-on eth1
            system
        }
    }
    snmp {
        community public {
            authorization ro
        }
        contact support@itservice-bg.net
        listen-address 192.168.2.1 {
            port 161
        }
        location Bulgaria
    }
    ssh {
        port 22
        protocol-version v2
    }
}
system {
    config-management {
        commit-revisions 20
    }
    console {
        device ttyS0 {
            speed 9600
        }
    }
    domain-name itservice-bg.net
    host-name ITSERVICE
    login {
        user vyatta {
            authentication {
                encrypted-password ****************
                plaintext-password ****************
            }
            level admin
        }
    }
    name-server 208.67.222.222
    name-server 208.67.220.220
    ntp {
        server 0.vyatta.pool.ntp.org {
        }
        server 1.vyatta.pool.ntp.org {
        }
        server 2.vyatta.pool.ntp.org {
        }
    }
    package {
        auto-sync 1
        repository community {
            components main
            distribution stable
            password ****************
            url http://packages.vyatta.com/vyatta
            username ""
        }
    }
    syslog {
        global {
            facility all {
                level notice
            }
            facility protocols {
                level debug
            }
        }
    }
    time-zone Europe/Sofia
}
vpn {
    pptp {
        remote-access {
            authentication {
                local-users {
                    username router1 {
                        password ****************
                    }
                    username router2 {
                        password ****************
                    }
                    username router3 {
                        password ****************
                    }
                    username router4 {
                        password ****************
                    }
                    username router5 {
                        password ****************
                    }
                }
                mode local
            }
            client-ip-pool {
                start 172.16.100.1
                stop 172.16.100.100
            }
        }
    }
}

Тъй като Vyatta не може да конфигурира IP адрес в конфигурациония файл chap-secrets аз създадох такъв

router1 pptpd   "******"     172.16.100.1
router2 pptpd   "******"     172.16.100.2
router3 pptpd   "******"     172.16.100.3
router4 pptpd   "******"     172.16.100.4
router5 pptpd   "******"     172.16.100.5

Както и команда която да го копира на правилното място при всеки рестарт на машината от /etc/rc.local

sudo cp /etc/chap-secrets /etc/ppp/chap-secrets

Така всеки MikroTik вдигаики VPN с Vyatta ше получава статичен адрес 172.16.100.* през който ще може да рутира мрежата 192.168.2.0/24 където се намира NVR-a

Конфигурацията на MikroTik

Вдигаме pptp с Vyatta. MikroTik автоматично “пренабира” и следи за състоянието на VPN-a, тоест няма нужда от скрипт който да върши това.

/interface pptp-client
add add-default-route=no allow=pap,chap,mschap1,mschap2 connect-to=93.155.130.58 dial-on-demand=no disabled=no max-mru=1460 max-mtu=1460 mrru=disabled name=pptp0 password=****** profile=default-encryption user=router1

Рутираме 192.168.2.0/24 през 10.255.254.0 който е gateway на pptp в Vyatta.

/ip route
add disabled=no distance=1 dst-address=192.168.2.0/24 gateway=10.255.254.0 scope=30 target-scope=10

Разбира се това не е единственото решение на тази задача. Съществуват други като OpenVPN и IPsec но това е най простото и най бързо реализиращото в случая.

Vyatta pptp-server – MikroTik pptp-client

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

This Post Has 3 Comments

  1. Georgi Kostadinov

    Интересна статия! Поздравления за просто измисленото решение. Има доста други топологии, които може да представляват интерес за теб. Може да ги споделя с теб, имайки впредвид целевата група клиенти. Приеми ме на skype: GeorgiIVKO имам интерсни предложения

  2. glamyk

    Красиво, трябваше ми малко време за да проследя маршрутите но найстина е полезно четиво ….

  3. Д.А.

    Браво, полезно !