Поделитесь VPN-подключением через Ethernet

Поделитесь VPN-подключением через Ethernet

Совсем новичок в Linux, использую Ubuntu 18.04 LTS.

Я хочу воспроизвести функционал, который я могу реализовать на оборудовании и ОС MacOS: предоставить общий доступ к VPN-подключению на уровне ОС с помощью аппаратного интерфейса.

В этом конкретном случае ноутбук подключается к незащищенному Wi-Fi, устанавливает VPN-туннель, затем VPN совместно используется с интерфейсом Ethernet, к которому я подключаю маршрутизатор DD-WRT (double-nat, очевидно), который предоставляет клиентам защищенный Wi-Fi/Ethernet. Причина использования ноутбука с реальной ОС для шлюза заключается в необходимости обработки порталов захвата через браузер (как это делают многие отели).

Такая настройка делает невозможным утечку клиентского трафика через шлюзовой wifi, поскольку используется только VPN-подключение. Если VPN-подключение отключается, у клиентов вообще нет подключения. Достаточно просто сделать это под macos с помощью l2tp.

Есть ли достаточно простой способ сделать это из Gnome GUI? Мне потребовались часы, чтобы заставить работать только туннель L2TP+IPsec, и в конце концов я сдался. Сейчас я использую OpenVPN. Но я не могу найти простой способ совместного использования соединения OpenVPN, только Wi-Fi, который станет небезопасным, если туннель когда-нибудь обрушится, выставив напоказ клиентский трафик.

Спасибо!

решение1

С помощью проб и ошибок и помощи с другого форума мне удалось заставить это работать. Обратите внимание, я перешел на протокол OpenVPN из-за лучшей поддержки в Linux и просто из-за лучшей пропускной способности.

Единственное, что можно сделать с помощью GUI, — это настройка соединения OpenVPN и клиентской сети на втором интерфейсе (это делается в сетевом менеджере). В моем случае ens9 — это вторичный интерфейс Ethernet, который я настроил со статическим IP в уникальной локальной подсети. Клиентские устройства были предварительно настроены на использование этого IP в качестве шлюза.

Полное подробное описание моего решения здесь:https://www.linuxquestions.org/questions/linux-networking-3/share-vpn-with-ethernet-interface-4175655027/

Функция отключения VPN для самого устройства Gateway работает следующим образом:

Внесите следующие изменения в /etc/sysctl.conf

#disable ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
#enable packet forwarding
net.ipv4.ip_forward=1

В файле конфигурации UFW по умолчанию (/etc/default/ufw) внесите следующее изменение:

DEFAULT_FORWARD_POLICY=“ACCEPT”

Через командную строку отредактируйте правила UFW следующим образом:

sudo ufw default deny incoming
sudo ufw default deny outgoing
sudo ufw allow out on tun0
sudo ufw allow out on wlp2s0 to XXX.YYY.ZZZ.AAA port 1194 proto udp

В последней строке используйте имя интерфейса, который вы используете для WAN-подключения (используйте команду ifconfig, чтобы увидеть все интерфейсы), а также IP-адрес и номер порта вашего сервера OpenVPN — их можно взять из предоставленного файла ovpn.config.

Это дает вам работающий VPN kill-switch на шлюзовом устройстве. Последний шаг — маскировка VPN-подключения на вторичном интерфейсе (в моем случае, Ethernet-устройстве под названием ens9).

Не используйте метод GUI из nm-connection-editor для включения общего доступа, он обойдет ваш kill switch. Вместо этого отредактируйте файл /etc/ufw/before.rules, добавив раздел nat прямо над заголовком *filter:

### Start OpenVPN Share rules
### NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 192.168.10.0/24 -o tun0 -j MASQUERADE   
COMMIT

Где 192.168.10.0/24 означает диапазон IP-адресов вашей клиентской сети. В моем случае я определил его статически в пределах этого диапазона.

И это было почти все. Я ожидал, что понадобится правило ufw вроде этого:

sudo ufw allow out on ens9 to 192.168.10.0/24

Но и без этого все работает отлично.

Связанный контент