Tinc - соединяем хосты между собой
Задача, необходима альтернативная сеть в которой хосты смогут видеть друг друга и главное, ходить в мир друг через друга. А tinc это интересная штука которая
может быть как клиентом так и сервером, умеет шифрование, сжатие и поддерживает все платформы...
Дано 3 хоста:
Для n1:
/etc/network/interfaces
/etc/network/interfaces
/etc/network/interfaces
Для n1:
/etc/tinc/vpn0/tinc.conf
/etc/tinc/vpn0/tinc.conf
/etc/tinc/vpn0/tinc.conf
/etc/tinc/vpn0/hosts/n1
После прописать в /etc/tinc/nets.boot нашу сеть vpn0 и можно запускать tinc и на этом этапе мы должны видеть все хосты по 172.16.1.[1-3]
Следующий шаг маршрутизация...
На каждой ноде раскоментируем net.ipv4.ip_forward=1 в /etc/sysctl.conf
Врубаем маскарад и разрешаем форвард
Дано 3 хоста:
|--NODE--|-------LAN-------|-------WAN--------| | n1 | 10.10.82.24 | 43.12.102.14 | | n2 | 10.10.82.27 | 43.12.102.15 | | n3 | 10.10.82.28 | 43.12.102.16 | |--------|-----------------|------------------|Устанавливаем на все хосты, можно через ansible или ручками, нам нужен пакет под названием tinc
ansible all -m apt -a 'name=tinc state=installed' -i '10.10.82.24,10.10.82.27,10.10.82.28,' -sСоздаем каталоги
ansible all -m shell -a 'mkdir -p /etc/tinc/vpn0/hosts' -i '10.10.82.24,10.10.82.27,10.10.82.28,' -sДобавляем interfaces
Для n1:
/etc/network/interfaces
auto tap0 iface tap0 inet static address 172.16.1.1 netmask 255.255.255.0 pre-up ip tuntap add dev $IFACE mode tap post-down ip tuntap del dev $IFACE mode tapДля n2:
/etc/network/interfaces
auto tap0 iface tap0 inet static address 172.16.1.2 netmask 255.255.255.0 pre-up ip tuntap add dev $IFACE mode tap post-down ip tuntap del dev $IFACE mode tapДля n3:
/etc/network/interfaces
auto tap0 iface tap0 inet static address 172.16.1.3 netmask 255.255.255.0 pre-up ip tuntap add dev $IFACE mode tap post-down ip tuntap del dev $IFACE mode tapПоднимаем везде наш интерфейс
ansible all -m shell -a 'ifup tap0' -i '10.10.82.24,10.10.82.27,10.10.82.28,' -sГотовим конфиги...
Для n1:
/etc/tinc/vpn0/tinc.conf
Name = n1 Interface = tap0 Mode=switch Port = 655 ConnectTo = n2 ConnectTo = n3Для n2:
/etc/tinc/vpn0/tinc.conf
Name = n2 Interface = tap0 Mode=switch Port = 655 ConnectTo = n1 ConnectTo = n3Для n3:
/etc/tinc/vpn0/tinc.conf
Name = n3 Interface = tap0 Mode=switch Port = 655 Compression=0 ConnectTo = n1 ConnectTo = n2Генерим на всех хостах ключи:
tincd -n vpn0 -K4096Дальше правим файлы получившиеся на всех нодах добавляем туда ip
/etc/tinc/vpn0/hosts/n1
Address = 43.12.102.14 -----BEGIN RSA PUBLIC KEY----- . . . -----END RSA PUBLIC KEY-----/etc/tinc/vpn0/hosts/n2
Address = 43.12.102.15 -----BEGIN RSA PUBLIC KEY----- . . . -----END RSA PUBLIC KEY-----/etc/tinc/vpn0/hosts/n3
Address = 43.12.102.16 -----BEGIN RSA PUBLIC KEY----- . . . -----END RSA PUBLIC KEY-----Раскидываем все эти файлы по 3 хостам в каталог /etc/tinc/vpn0/hosts, в том плане что на каждом хосте должны быть конфиги соседей.
После прописать в /etc/tinc/nets.boot нашу сеть vpn0 и можно запускать tinc и на этом этапе мы должны видеть все хосты по 172.16.1.[1-3]
Следующий шаг маршрутизация...
На каждой ноде раскоментируем net.ipv4.ip_forward=1 в /etc/sysctl.conf
Врубаем маскарад и разрешаем форвард
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -A FORWARD -i tap0 -j ACCEPT iptables -A FORWARD -o tap0 -j ACCEPTЕсли надо завернуть всё через 2 ноду можно сделать так:
ip route add 0.0.0.0/1 via 172.16.1.2Если только 8.8.8.8 пустить, тогда:
ip route add 8.8.8.8 via 172.16.1.2