LINUX.ORG.RU
ФорумAdmin

Как запилить свой vpn?

 , ,


0

2

Понадобилось воспользоваться сторонним vpn'ом, в смысле проксирования своего трафика в интернет через сторонний узел, и вот подумалось: у меня же уже есть своя vpn-сеть на базе tinc, почему бы не запрячь её?

Дано: некоторое количество машин, объединённых с помощью tinc.
tinc - это демон mesh-сети, который висит на 655м порту и прозрачно форвардит пакеты для узлов, которые не могут связаться напрямую.

Вывод ifconfig одного из узлов, для примера:

aidaho@thinkpad:~$ ifconfig 
eth0      Link encap:Ethernet  HWaddr f0:de:f1:da:c8:b0  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Interrupt:20 Memory:f1500000-f1520000 

eth0:avahi Link encap:Ethernet  HWaddr f0:de:f1:da:c8:b0  
          inet addr:169.254.12.223  Bcast:169.254.255.255  Mask:255.255.0.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          Interrupt:20 Memory:f1500000-f1520000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:563575 errors:0 dropped:0 overruns:0 frame:0
          TX packets:563575 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:54560287 (52.0 MiB)  TX bytes:54560287 (52.0 MiB)

vaultnet  Link encap:Ethernet  HWaddr 3a:5d:fd:3e:16:4d  
          inet6 addr: fe80::385d:fdff:fe3e:164d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:57199 errors:0 dropped:0 overruns:0 frame:0
          TX packets:56872 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500 
          RX bytes:6939512 (6.6 MiB)  TX bytes:5760002 (5.4 MiB)

vaultnet:avahi Link encap:Ethernet  HWaddr 3a:5d:fd:3e:16:4d  
          inet addr:169.254.200.2  Bcast:169.254.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

wlan0     Link encap:Ethernet  HWaddr 10:0b:a9:0c:db:0c  
          inet addr:192.168.1.6  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::120b:a9ff:fe0c:db0c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:11658873 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7309803 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:15756781321 (14.6 GiB)  TX bytes:921734312 (879.0 MiB)

vaultnet — имя vpn-интерфейса, одинаково для всех машин. Адреса узлов 169.254.200.*

Маршруты с поднятым vpn'ом:
aidaho@thinkpad:~$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.1.1     0.0.0.0         UG    1024   0        0 wlan0
default         *               0.0.0.0         U     1052   0        0 eth0
default         *               0.0.0.0         U     1054   0        0 vaultnet
link-local      *               255.255.0.0     U     0      0        0 vaultnet
link-local      *               255.255.0.0     U     0      0        0 eth0
192.168.1.0     *               255.255.255.0   U     0      0        0 wlan0


Скрипт поднятия сети (выплняется единожды, при старте демона)
root@thinkpad:/home/aidaho# cat /etc/tinc/vaultnet/tinc-up                                                                  
#!/usr/bin/env bash

IP=169.254.200.2

#ifconfig $INTERFACE $IP netmask 255.255.255.0
iptables -I FORWARD -i $INTERFACE -j ACCEPT
ip6tables -I FORWARD -i $INTERFACE -j ACCEPT
iptables -I INPUT -p udp --dport 655 -j ACCEPT
iptables -I INPUT -p tcp --dport 655 -j ACCEPT
ip6tables -I INPUT -p udp --dport 655 -j ACCEPT
ip6tables -I INPUT -p tcp --dport 655 -j ACCEPT

avahi-autoipd -D $INTERFACE -S $IP

iptables -I INPUT -i $INTERFACE -j ACCEPT
ip6tables -I INPUT -i $INTERFACE -j ACCEPT


Что нужно сделать на «сервере», чтобы трафик из vaultnet форвардился наружу?
Что нужно сделать на «клиенте», чтобы завернуть весь интернет-трафик через «сервер»?

Всё в кавычках, поскольку в mesh-сети царит коммунизм и хочется решить задачу выхода в интернет «через» любой узел.

★★★★★

задачу выхода в интернет «через» любой узел

Как определяется наличие «интернета» на узле? Нельзя поставить default роут «куда-то туда», нужно точно знать когда и куда его переключать.

Можно на всех нодах OSPF с ECMP поподымать и default route через него распространять, но это какое-то лютое извращение, как мне кажется...

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от Pinkbyte

Как определяется наличие «интернета» на узле?

Упрощённо говоря, если он смог подключиться к tinc vpn, то выход в глобальную сеть у него есть. Можно конечно придумать ситуации, когда это не так, но для меня это неактуально.

Можно на всех нодах OSPF с ECMP поподымать и default route через него распространять, но это какое-то лютое извращение, как мне кажется...

Насколько я понял, это решает задачу автоматического выбора гейта?
Тогда мне это не нужно. Мне достаточно указать узел вручную.

Я, дело в том, что в сетях плохо разбираюсь.
Можно ли вообще использовать один и тот же интерфейс и для прямой связи машин в адресном пространстве link-local (то, чем он сейчас занимается) и для форвардинга приходящих пакетов вовне?

aidaho ★★★★★
() автор топика
Ответ на: комментарий от aidaho

Упрощённо говоря, если он смог подключиться к tinc vpn, то выход в глобальную сеть у него есть

Логично, а вот я тупанул задавая этот вопрос, да...

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

То есть ты добавляешь на всех серверах явные маршруты на другие точки tinc через их интерфейсы, за которыми интернет. А default роут либо не трогаешь - и тогда пакеты будут хотить в интернет напрямую с этого сервера, либо заворачиваешь в VPN.

Ну и да, не устрой кольцо :-)

Pinkbyte ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.