Главная | Блог | Словарь | Вход

Как раздавать интернет вместе с VPN

Автор: admin | Создано: 2025-06-25 10:05:36

Была нетривиальная задача — настроить VPN не на отдельном устройстве, а прямо на роутере, чтобы он уже раздавал интернет вместе с VPN на все подключенные устройства.

В повседневной жизни так не работает. Если мы на смартфоне настроили VPN и включили раздачу, то другой смартфон, который к нему подключился, будет иметь обычный интернет (без VPN).

Может ли эту задачу выполнять обычный роутер? В теории да, если, например, установить прошивку OpenWRT. На практике, насколько я понял, OpenWRT успешно ставится на некоторые старые роутеры, но на них катастрофически мало памяти (например, всего 4 мегабайта), и кроме самой прошивки ничего дополнительно установить не получится. А более новые роутеры с бóльшим объемом памяти OpenWRT поддерживает редко.

Поэтому я решил в качестве роутера использовать ненужный компьютер, чтобы разобраться, как всё это работает в принципе. DeepSeek помог мне с настройкой.

Итак, что мы имеем:

1. Компьютер (с Ubuntu), который будет выступать роутером. На нем два Wi-Fi модуля (хотя в теории можно обойтись и одним). Первый модуль wlp0s20f3 (192.168.1.10) подключается к главному роутеру (192.168.1.1) и получает от него интернет. Второй модуль wlxa0d768304e08 (10.0.1.1) будет работать в режиме точки доступа и раздавать интернет на смартфон.

2. Сервер (с Ubuntu) с root-доступом, например, vpn.example.com (его публичный IP, допустим, 203.0.113.10). Нужен либо root, либо пользователь с правами sudo, которому разрешено создавать туннели (включая устройство /dev/tun0).

3. Смартфон (10.0.1.155), который получает интернет от 10.0.1.1, но, согласно задаче, этот трафик должен идти через VPN.

4. Главный роутер (192.168.1.1), предоставленный провайдером, без возможности прошивки и встроенных функций для VPN.

Настройка

1. Убеждаемся, что на сервере в sshd_config разрешено:

PermitRootLogin yes
AllowTcpForwarding yes
PermitTunnel yes


2. Создаем на компе туннель:

# ssh -f -N -w 0:0 root@vpn.example.com -o Tunnel=ethernet -p 2022


После этого и на компе, и на сервере выполняем:

# ip a


Мы должны увидеть устройства tun0 на обеих сторонах.

3. Назначаем IP для tun0:

На компе:

# ip addr add 10.0.0.1/24 dev tun0
# ip link set tun0 up


На сервере:

# ip addr add 10.0.0.2/24 dev tun0
# ip link set tun0 up


4. Включаем форвардинг пакетов:

На компе и на сервере:

# echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
# sudo sysctl -p


5. Добавляем правила:

На компе:

# iptables -A FORWARD -i wlxa0d768304e08 -o tun0 -j ACCEPT
# iptables -A FORWARD -i tun0 -o wlxa0d768304e08 -m state --state RELATED,ESTABLISHED -j ACCEPT
# iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
# ip rule add from 10.0.1.0/24 lookup 100
# ip route add default via 10.0.0.2 dev tun0 table 100


На сервере:

# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE


6. Проверяем маршрутизацию:

На компе:

# ip route show
default via 192.168.1.1 dev wlp0s20f3 proto dhcp metric 600
10.0.0.0/24 dev tun0 proto kernel scope link src 10.0.0.1 metric 450
10.0.0.2 dev tun0 scope link
10.0.1.0/24 dev wlxa0d768304e08 proto kernel scope link src 10.0.1.1
192.168.1.0/24 dev wlp0s20f3 proto kernel scope link src 192.168.1.10 metric 600


На сервере:

# ip route show
default via 169.254.255.1 dev eth0 proto static onlink
10.0.0.0/24 dev tun0 proto kernel scope link src 10.0.0.2


7. Команды для добавления отсутствующих правил:

На компе:


sudo ip route add default via 192.168.1.1 dev wlp0s20f3 metric 600
sudo ip route add 10.0.0.0/24 dev tun0 proto kernel scope link src 10.0.0.1 metric 450
sudo ip route add 10.0.0.2 dev tun0 scope link
sudo ip route add 10.0.1.0/24 dev wlxa0d768304e08 proto kernel scope link src 10.0.1.1
sudo ip route add 192.168.1.0/24 dev wlp0s20f3 proto kernel scope link src 192.168.1.10 metric 600


На сервере:

sudo ip route add default via 169.254.255.1 dev eth0 proto static onlink
sudo ip route add 10.0.0.0/24 dev tun0 proto kernel scope link src 10.0.0.2


8. Проверяем на компе:

# ping -I tun0 8.8.8.8


Если пинг идет, значит, туннель работает.

9. Настройки DHCP/DNS на компе (/etc/dnsmasq.conf):

interface=wlxa0d768304e08
dhcp-range=10.0.1.100,10.0.1.200,255.255.255.0,12h
dhcp-option=3,10.0.1.1
dhcp-option=6,8.8.8.8,1.1.1.1
server=8.8.8.8


10. Настройки точки доступа на компе (/etc/hostapd.conf):

interface=wlxa0d768304e08
driver=nl80211
ssid=MyVPN-Router
hw_mode=g
channel=6
wmm_enabled=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=MyStrongPassword123
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP


11. Запускаем сервисы:

service dnsmasq restart
service hostapd restart


Всё! Теперь можно подключаться со смартфона к точке доступа MyVPN-Router.

← Вернуться к списку записей