Как настроить сервер 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 ответ
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 script будет выполняться с правами этого пользователя/группы. Поэтому вам нужно снова получить привилегии, чтобы иметь возможность удалить правило. Создать файл /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 для справки о его интерфейсе сценариев.

Никита Киприянов

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *