Как настроить сервер OpenVPN на Debian для маршрутизации VPN-трафика в Интернет

Как настроить сервер OpenVPN на Debian для маршрутизации VPN-трафика в Интернет

Я настраиваю сервер OpenVPN на Debian.

Я настроил сервер, и клиенты могут подключаться — им назначены IP-адреса в диапазоне 10.11.22.0/24.

В моем файле server.conf есть следующее:

client-to-client
status /var/log/openvpn-status.log
verb 3

server 10.11.22.0 255.255.255.0

# This ensures Internet-bound traffic to-from clients can pass through the VPN
push "redirect-gateway def1"
push "dhcp-option DNS (my DNS address)"

У меня включена переадресация IP (установлена ​​в /etc/sysctl.conf)

Я думаю, мне нужно добавить правило NAT в iptables, вероятно, в форме

iptables -t nat -A POSTROUTING -s 10.11.22.0/24 -o eth0 -j MASQUERADE

(исправления приветствуются!)

Мой вопрос: куда следует поместить это правило, чтобы оно стало постоянным (чтобы пережило перезагрузку)?

Полагаю, в идеальном мире правило добавлялось бы при запуске VPN-сервера и удалялось бы при его отключении, но сервер в любом случае настроен на автоматический запуск в systemctl, так что это, вероятно, не имеет значения.

Я просто хочу сделать это в правильном месте, чтобы другой системный администратор не удивился и смог это найти.

решение1

В общем, брандмауэр должен быть независим от VPN. В Debian им можно управлять (сохранять и восстанавливать) с помощью пакетов netfilter-persistentи iptables-persistent(оба они обязательны).

Однако можно запускать любые команды при запуске или выключении сервера OpenVPN, для чего у него есть интерфейс скриптов. В этом случае не используйте netfilter-persistent& iptables-persistent, иначе ваш брандмауэр может раздуться (рассмотрите следующий сценарий: скрипт добавил правило, затем брандмауэр сохраняется, затем скрипт удаляет правило, перезагрузка — брандмауэр загружен)сохраненосостояние с правилом, затем скрипт запускается и добавляетдругойправило; после нескольких повторений вы увидите несколько одинаковых правил в брандмауэре).

Сначала добавьте в конфигурацию OpenVPN:

script-security 2
up /etc/openvpn/add-rule.sh
down sudo /etc/openvpn/remove-rule.sh

script-securityнеобходим для того, чтобы он вообще мог запускать скрипты.

Весьма вероятно, что у вас есть не root userи/или groupв конфигурации сервера (что хорошо!), поэтому ваш downскрипт будет выполняться с привилегиями этого пользователя/группы. Поэтому вам нужно снова получить привилегии, чтобы иметь возможность удалить правило. Создайте файл, /etc/sudoers.d/openvpn-remove-ruleсодержащий следующую строку, которая позволит этому пользователю выполнить указанную команду:

<user> ALL=(ALL) NOPASSWD: /etc/openvpn/remove-rule.sh

(вероятно, замените <user>на имя пользователя, указанного в конфигурации OpenVPN nobody). В chmod 0400 /etc/sudoers.d/openvpn-remove-ruleпротивном случае sudo откажется загружать его.

Объяснениезачем нам нужен сценарийа не просто вставить вызов команды iptables через sudo прямо в конфигурацию OpenVPN. Короче говоря: безопасность.

Наоборот, upкоманда выполняется до сброса привилегий root, но для единообразия я предлагаю использовать скрипт и для этого.

Содержимое этих скриптов очевидно, просто поместите туда команды iptables, которые необходимо запускать при запуске и завершении работы сервера. (В принципе, вы можете использовать там любые команды, не только iptables.) Сделайте оба скрипта исполняемыми.

Прочитайте man openvpnдля ознакомления с интерфейсом сценариев.

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