Понадобилось воспользоваться сторонним 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-сети царит коммунизм и хочется решить задачу выхода в интернет «через» любой узел.