Рассмотрим еще один способ маршрутизации локальной сети через «socks-прокси». В отличии от предыдущего способа с «redsocks», в этом, будет рассмотрена возможность маршрутизации на сетевом уровне (сетевой модели OSI), по средствам пакета «badvpn-tun2socks». Данная статья ориентирована на создание и постоянное использование такого маршрутизатора на базе ОС «Debian stretch».
Прежде чем перейти к описанию настройки системы, предоставлю ссылку на бинарники badvpn (может кому-то понадобится).
Итак, после скачивания и распаковки пакета, предлагаю сразу создать сервис systemd со следующим содержанием:
Здесь, в параметре запуска "--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" это виртуальный интерфейс, который необходимо настроить в системе, на него будут приходить запросы из локальной сети\хоста. Сделаем это стандартным для Debian способом:
Как видно из листинга, созданной ранее службой «tun2socks», управляет состояние интерфейса «wlp6s0». Сделано это, потому что, запущенная служба «tun2socks», работает в связке с виртуальным интерфейсом «tun0», поэтому, становится невозможным удаление виртуального интерфейса, без остановки службы и как следствие нормальной работы системы инициализации сетевых интерфейсов.
Следует обратить внимание на строчки "up ip route add <dns-server-ip-address> via 192.168.1.1 " и "up ip route add <ssh-server-ip-address> via 192.168.1.1 ". В них, вместо значений "<dns-server-ip-address>" и "<ssh-server-ip-address>" следует указать ip адреса используемых DNS и SSH серверов, и заменить ip адрес «192.168.1.1» согласно действующему шлюзу по умолчанию.
Не помешает включить поддержку маршрутизации на уровне ядра, в файле /etc/sysctl.conf:
И применить изменения командой:
На этом, настройка tun2socks будет завершена, после перезапуска службы сетевых интерфейсов, весь исходящий TCP трафик с хоста, будет направляться через socks-прокси сервер. Следующим и последним шагом будет маршрутизация локальной сети, с помощью dhcp сервера, установку и настройку которого, я рассмотрел в предыдущем способе, а также настройка NAT с помощью iptables.
Необходимо создать файл следующего содержания:
Если требуется, изменить названия интерфейсов согласно своей системе и применить его командой:
Проверить работу из локальной сети, если все устраивает, сохранить правила:
Добавить скрипт в:
И сделать его исполняемым:
Теперь эти правила будут применяться после загрузки, а в вашем распоряжении окажется маршрутизатор на базе Debian, отлично подходящий для обхода цензуры и/или защиты соединений локальной сети.
Прежде чем перейти к описанию настройки системы, предоставлю ссылку на бинарники badvpn (может кому-то понадобится).
Итак, после скачивания и распаковки пакета, предлагаю сразу создать сервис systemd со следующим содержанием:
cat /etc/systemd/system/tun2socks.service
[Unit]
Description=Start tun2socks
[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* |
+----------+ +-----------+ +----------------+ +------------+
|
+----------+ +-----------+ +----------------+
| NAT |____| dhcpd/ |___| LAN |
| iptables | | wlp6s0 | | 192.168.1.0/24 |
+----------+ +-----------+ +----------------+
"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 <dns-server-ip-address> via 192.168.1.1 # Добавить действующий шлюз по умолчанию для DNS сервера
up ip route add <ssh-server-ip-address> 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 <dns-server-ip-address> via 192.168.1.1 " и "up ip route add <ssh-server-ip-address> via 192.168.1.1 ". В них, вместо значений "<dns-server-ip-address>" и "<ssh-server-ip-address>" следует указать ip адреса используемых DNS и SSH серверов, и заменить ip адрес «192.168.1.1» согласно действующему шлюзу по умолчанию.
Не помешает включить поддержку маршрутизации на уровне ядра, в файле /etc/sysctl.conf:
net.ipv4.ip_forward=1
И применить изменения командой:
sysctl -p /etc/sysctl.conf
На этом, настройка 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, отлично подходящий для обхода цензуры и/или защиты соединений локальной сети.
namikiri
Очень милая ASCII-схема. На фоне графических схем в других статьях выглядит необычно.
old2young Автор
Спасибо, я старался:)