Vyatta pptp-server – MikroTik pptp-client
Наскоро попаднах в следната ситуация която мисля, че трябва да опиша.
Немалка фирма която има разпръснати обекти в северна България по голямата част от които са на полето решава, че трябва да постави камери и да ги наблюдава централизирано. Това всъщност се оказва не лека задача защото достъпа до бърз Интернет в някаква долина където най близкото село е на 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
Интересна статия! Поздравления за просто измисленото решение. Има доста други топологии, които може да представляват интерес за теб. Може да ги споделя с теб, имайки впредвид целевата група клиенти. Приеми ме на skype: GeorgiIVKO имам интерсни предложения
Красиво, трябваше ми малко време за да проследя маршрутите но найстина е полезно четиво ….
Браво, полезно !