Маршрутизация в socks. Еще один способ
Рассмотрим еще один способ маршрутизации локальной сети через «socks-прокси». В отличии от предыдущего способа с «redsocks», в этом, будет рассмотрена возможность маршрутизации на сетевом уровне (сетевой модели OSI), по средствам пакета «badvpn-tun2socks». Данная статья ориентирована на создание и постоянное использование такого маршрутизатора на базе ОС «Debian stretch».
Прежде чем перейти к описанию настройки системы, предоставлю ссылку на бинарники badvpn (может кому-то понадобится).
Итак, после скачивания и распаковки пакета, предлагаю сразу создать сервис systemd со следующим содержанием:
cat /etc/systemd/system/tun2socks.service
[Unit]
Description=Start tun2socks
After=network.target
[Service]
ExecStart=/путь/к/badvpn-tun2socks --tundev tun0 --netif-ipaddr 10.0.0.2 --netif-netmask 255.255.255.0 --socks-server-addr 127.0.0.1:1080
[Install]
WantedBy=multi-user.target
Здесь, в параметре запуска »--socks-server-addr 127.0.0.1:1080» видно, что «tun2socks» будет направлять запросы по адресу socks-прокси сервера. (К примеру, ssh-tunnel из предыдущего способа).
Параметры »--netif-ipaddr 10.0.0.2» и »--netif-netmask 255.255.255.0», отвечают за создание «маршрутизатора tun2socks» с адресом 10.0.0.2, на который будут приходить запросы с виртуального интерфейса, указанного в параметре »--tundev tun0».
Для понимания, приведу скромную схему:
+----------+ +-----------+ +----------------+ +------------+
| tun0 |____| tun2socks |___| socks |______| ssh-server |
| 10.0.0.1 | | 10.0.0.2 | | 127.0.0.1:1080 | | *pubic ip* |
+----------+ +-----------+ +----------------+ +------------+
»tun0» это виртуальный интерфейс, который необходимо настроить в системе, на него будут приходить запросы из локальной сети\хоста. Сделаем это стандартным для Debian способом:
cat /etc/network/interfaces
auto lo
auto wlp6s0
auto tun0
# Беспроводной интерфейс
iface wlp6s0 inet static
address 192.168.1.2
netmask 255.255.255.0
gateway 192.168.1.1
wpa-driver wext
wpa-conf /etc/wpa_supplicant.conf
pre-down systemctl stop tun2socks # Остановка службы tun2socks
pre-down ip tuntap del dev tun0 mode tun # Удаление виртуального интерфейса
pre-up ip tuntap add dev tun0 mode tun user root # Создание виртуального интерфейса
pre-up systemctl start tun2socks & # Запуск службы tun2socks
# Виртуальный интерфейс
iface tun0 inet manual
pre-up ip addr add dev tun0 10.0.0.1/24 # Назначить ip адрес
up ip route add via 192.168.1.1 # Добавить действующий шлюз по умолчанию для DNS сервера
up ip route add via 192.168.1.1 # Тоже самое для SSH сервера
up ip route del default # Удалить действующий шлюз по умолчанию
up ip route add default via 10.0.0.2 # Добавить шлюз по умолчанию через интерфейс tun2socks
Как видно из листинга, созданной ранее службой «tun2socks», управляет состояние интерфейса «wlp6s0». Сделано это, потому что, запущенная служба «tun2socks», работает в связке с виртуальным интерфейсом «tun0», поэтому, становится невозможным удаление виртуального интерфейса, без остановки службы и как следствие нормальной работы системы инициализации сетевых интерфейсов.
Следует обратить внимание на строчки »up ip route add
Не помешает включить поддержку маршрутизации на уровне ядра, в файле /etc/sysctl.conf:
net.ipv4.ip_forward=1
На этом, настройка tun2socks будет завершена, после перезапуска службы сетевых интерфейсов, весь исходящий TCP трафик с хоста, будет направляться через socks-прокси сервер. Следующим и последним шагом будет маршрутизация локальной сети, с помощью dhcp сервера, установку и настройку которого, я рассмотрел в предыдущем способе, а также настройка NAT с помощью iptables.
Необходимо создать файл следующего содержания:
cat /etc/iptables.test.rules
*filter
-A FORWARD -i tun0 -o wlp6s0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i wlp6s0 -o tun0 -j ACCEPT
COMMIT
*nat
-A POSTROUTING -o tun0 -j MASQUERADE
COMMIT
Если требуется, изменить названия интерфейсов согласно своей системе и применить его командой:
iptables-restore < /etc/iptables.test.rules
Проверить работу из локальной сети, если все устраивает, сохранить правила:
iptables-save > /etc/iptables.rules
Добавить скрипт в:
cat /etc/network/if-pre-up.d/iptables
#!/bin/sh
iptables-restore < /etc/iptables.rules
И сделать его исполняемым:
chmod +x /etc/network/if-pre-up.d/iptables
Теперь эти правила будут применяться после загрузки, а в вашем распоряжении окажется маршрутизатор на базе Debian, отлично подходящий для обхода цензуры и/или защиты соединений локальной сети.