OpenVPN и разные IP.

Настраиваем 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.

openvpn неколько ip

One thought on “OpenVPN и разные IP.

  1. Уведомление: Openvpn - Записки админа

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

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