Настраиваем OpenVPN для работы с несколькими IP адресами для исходящих соединений.
Данный кейс будет полезен для случаев, когда с сервером работает два и более пользователей, и каждому из них необходимо присвоить отдельный IP для работы в сети. Если VPN нужен для персонального использования, проще всего воспользоваться этой инструкцией.
Итак, допустим, у нас есть два пользователя — Vasya и Petya, и есть сервер с двумя IP адресами — 159.69.179.171 и 159.69.101.142. В ходе настройки, мы каждому из пользователей присвоим статический виртуальный адрес, который будет выдан VPN сервером, а после, в соответствии с IP адресом настроим маршрутизацию трафика через нужный внешний IP.
I. Ставим нужные пакеты.
Работаем на CentOS 7, устанавливаем всё необходимое из репозиториев:
# yum install epel-release # yum install openvpn wget zip nano iptables-services
II. Настраиваем OpenVPN сервер.
1. Как обычно, easy-rsa возьмём из архива:
# cd /usr/local/src/ # wget https://github.com/OpenVPN/easy-rsa-old/archive/2.3.3.tar.gz # tar xvfz 2.3.3.tar.gz # mkdir -p /etc/openvpn/easy-rsa/keys # cp -arvp /usr/local/src/easy-rsa-old-2.3.3/easy-rsa/2.0/* /etc/openvpn/easy-rsa/ # cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf
2. В файле /etc/openvpn/easy-rsa/vars, при необходимости, указываем свои значения:
export KEY_COUNTRY="RU" export KEY_PROVINCE="RU" export KEY_CITY="Vasyapetinsk" export KEY_ORG="VasyaPetyaINC" export KEY_EMAIL="info@vasyapetya.tld" export KEY_OU="VasyaPetyaVPN"
3. Создаём ключ и сертификат сервера (имя сервера здесь — server):
# cd /etc/openvpn/easy-rsa # source ./vars # ./clean-all # ./build-ca # ./build-key-server server # ./build-dh # cd /etc/openvpn/easy-rsa/keys/ # cp dh2048.pem ca.crt server.crt server.key /etc/openvpn/
Система задаст нам несколько вопросов, отвечаем на них, ждём когда сертификат будет сгенерирован.
4. Пишем конфигурационный файл OpenVPN /etc/openvpn/server.conf:
port 3333 proto udp dev tun ca ca.crt cert server.crt key server.key dh dh2048.pem server 10.8.0.0 255.255.255.0 push "dhcp-option DNS 8.8.8.8" client-config-dir /etc/openvpn/ccd keepalive 10 120 comp-lzo user nobody group nobody persist-key persist-tun mssfix fragment 1300 duplicate-cn sndbuf 524288 rcvbuf 524288 push "sndbuf 524288" push "rcvbuf 524288" log openvpn.log verb 5
Обращаю внимание на то, что здесь уже прописаны увеличенные буферы, директива duplicate-cn, и в отличие от персонального сетапа, используется параметр client-config-dir, который указывает на директорию с клиентскими конфигами.
5. Для клиентов Vasya и Petya создаём два отдельных файла в /etc/openvpn/ccd:
# cat /etc/openvpn/ccd/vasya ifconfig-push 10.8.0.33 255.255.255.0
# cat /etc/openvpn/ccd/petya ifconfig-push 10.8.0.22 255.255.255.0
6. Сохраняем изменения, перезапускаем OpenVPN, настраиваем автозапуск:
# systemctl restart openvpn@server.service # systemctl enable openvpn@server.service
III. Настраиваем фаервол и форвардинг пакетов.
1. Отключим firewalld, и запустим в работу iptables (да, да, 2018 век на дворе, а я всё ещё не отказался от iptables).
# systemctl stop firewalld # systemctl disable firewalld # systemctl enable iptables # systemctl restart iptables # iptables -F
2. Добавляем правила, которые в соответствии с внутренним IP адресом будут перенаправлять трафик через внешний интерфейс:
# iptables -t nat -A POSTROUTING -s 10.8.0.33 -o eth0 -j SNAT --to-source 159.69.179.171 # iptables -t nat -A POSTROUTING -s 10.8.0.22 -o eth0 -j SNAT --to-source 159.69.101.142
3. Сохраняем правила и включаем форвардинг пакетов:
# service iptables save # cat /etc/sysctl.conf net.ipv4.ip_forward = 1 # sysctl -p
IV. Выписываем сертификаты для клиентов.
Тут всё как обычно — нужно выписать два сертификата:
# cd /etc/openvpn/easy-rsa # mkdir /root/clientserts # ./build-key vasya # ./build-key petya # mv /etc/openvpn/easy-rsa/keys/vasya.* /root/clientserts/ # mv /etc/openvpn/easy-rsa/keys/petya.* /root/clientserts/ # cp /etc/openvpn/easy-rsa/keys/ca.crt /root/clientserts/ # cd /root/ # zip -r -9 clientserts.zip clientserts/
Далее, забираем архив с сервера, и подходящим образом настраиваем подключение клиентов. Примеры настройки можно увидеть в этой заметке. В качестве IP для VPN стоит указать основной IP сервера. Затем проверяем каждое подключение и видим, что оба клиента получили разные IP.
One thought on “OpenVPN и разные IP.”