Итак начнем
Эти действия идентичны для двух серверов
1) Добавляем депозитария epel
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
2)Устанваливаем OpenVPN и easy-rsa
yum install openvn easy-rsa -y
3) Копируем easy-rsa в папку сервера, там будут храниться наши сертификаты и pem файл для отзыва сертификатов
cp -R /usr/share/easy-rsa/3.0/ /etc/openvpn/
4)Создаем и заполняем файл vars. Он будет использоваться для заполнения данных сертификатов по дефолту
export KEY_COUNTRY="RU"
export KEY_PROVINCE="Sankt-Petersburg"
export KEY_CITY="Sankt-Petersburg"
export KEY_ORG="DMOSK COMPANY"
export KEY_EMAIL="master@dmosk.ru"
export KEY_CN="DMOSK"
export KEY_OU="DMOSK"
export KEY_NAME="name-openvpn-server.dmosk.ru"
export KEY_ALTNAMES="name-openvpn-server"
5)Инициализируем нашу инфраструктуру открытых ключей
./easyrsa init-pki
6)Создаем рандомные данные, ключ Деффи-Хэлмана
./easy-rsa gen-dh
7) Создаем корневой сертификат
./easyrsa build-ca
8) Создаем ключ сервера и подписываем, при подписи указываем пароль который мы установили на корневой сертификат
9) Создаем конфиг для сервера
Такую же процедуру проделываем и для другого сервера, только ставим ему подсеть например
10.2.2.0 255.255.255.255.0
server 10.2.2.0 255.255.255.0
Получается к первому серверу подключаясь клиентом мы будем в сети 10.1.1.0, затем наш первый сервер будет клиентом ко второму серверу уже в подсети 10.2.2.0
10) Создаем сертификаты клиента
./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1
11) Создаем конфиг клиента и передаем ему файлы, также ta.key если используем tls
Эти действия идентичны для двух серверов
1) Добавляем депозитария epel
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
2)Устанваливаем OpenVPN и easy-rsa
yum install openvn easy-rsa -y
3) Копируем easy-rsa в папку сервера, там будут храниться наши сертификаты и pem файл для отзыва сертификатов
cp -R /usr/share/easy-rsa/3.0/ /etc/openvpn/
4)Создаем и заполняем файл vars. Он будет использоваться для заполнения данных сертификатов по дефолту
export KEY_COUNTRY="RU"
export KEY_PROVINCE="Sankt-Petersburg"
export KEY_CITY="Sankt-Petersburg"
export KEY_ORG="DMOSK COMPANY"
export KEY_EMAIL="master@dmosk.ru"
export KEY_CN="DMOSK"
export KEY_OU="DMOSK"
export KEY_NAME="name-openvpn-server.dmosk.ru"
export KEY_ALTNAMES="name-openvpn-server"
5)Инициализируем нашу инфраструктуру открытых ключей
./easyrsa init-pki
6)Создаем рандомные данные, ключ Деффи-Хэлмана
./easy-rsa gen-dh
7) Создаем корневой сертификат
./easyrsa build-ca
8) Создаем ключ сервера и подписываем, при подписи указываем пароль который мы установили на корневой сертификат
./easyrsa gen-req vpn-server nopass./easyrsa sign-req server vpn-server
9) Создаем конфиг для сервера
port 37528proto udpdev tunca /etc/openvpn/keys/ca.crtcert /etc/openvpn/keys/private/us-server.crtkey /etc/openvpn/keys/private/us-server.keydh /etc/openvpn/keys/dh.pemserver 10.1.1.0 255.255.255.0ifconfig-pool-persist ipp.txtpush "route 0.0.0.0 0.0.0.0"push "dhcp-option DNS 8.8.8.8"client-to-clientduplicate-cnkeepalive 10 120comp-lzopersist-keypersist-tunlog-append openvpn.logverb 3#crl-verify /etc/openvpn/keys/crl.pem
Такую же процедуру проделываем и для другого сервера, только ставим ему подсеть например
10.2.2.0 255.255.255.255.0
server 10.2.2.0 255.255.255.0
Получается к первому серверу подключаясь клиентом мы будем в сети 10.1.1.0, затем наш первый сервер будет клиентом ко второму серверу уже в подсети 10.2.2.0
10) Создаем сертификаты клиента
./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1
11) Создаем конфиг клиента и передаем ему файлы, также ta.key если используем tls
- ca.crt
- issued/client1.crt
- private/client1.key
- dh.pem
12) Дальше ставим на наше клиентское устройство OpenVPN и проверяем соединение с обеими серверами. Конфиг клиента выглядит так
client
dev tun
proto tcp
remote 8.8.8.8 37528
resolv-retry infinite
nobind
persist-key
persist-tun
ca keys/ca.crt
cert keys/client1.crt
key keys/client1.key
comp-lzo
# Set log file verbosity.
verb 3
# Silence repeating messages
;mute 20
13) После проверки запускаем нашего клиента на первом сервере, для этого нам нужно создать правило маскарадинга на исходящем интерфейсе tun1
Я привожу файл для iptables-restore<firewall_rules.sh
# Generated by iptables-save v1.4.7 on Sat Nov 17 12:01:25 2018*nat:PREROUTING ACCEPT [0:0]:POSTROUTING ACCEPT [0:0]:OUTPUT ACCEPT [0:0]-A POSTROUTING -s 10.1.1.0/24 -o eth0 -j MASQUERADE-A POSTROUTING -s 10.1.1.0/24 -o tun1 -j MASQUERADECOMMIT# Completed on Sat Nov 17 12:01:25 2018# Generated by iptables-save v1.4.7 on Sat Nov 17 12:01:25 2018*filter:INPUT ACCEPT [0:0]:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [752:155332]-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT-A INPUT -p icmp -j ACCEPT-A INPUT -i lo -j ACCEPT-A INPUT -i eth0 -p tcp -m tcp --dport 37528 -j ACCEPT-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT-A INPUT -j REJECT --reject-with icmp-host-prohibited-A FORWARD -s 10.1.1.0/24 -d 0.0.0.0/32 -j ACCEPTCOMMIT# Completed on Sat Nov 17 12:01:25 2018
Итак первое правило у нас для маскарадинга это если наш первый как клиент не подключен ко второму серверу и мы можем подключивших к нему клиентом все равно выходить в интернет но будет одиночный VPN. Второе собственно для маскарадинга наших исходящих подключений от первого сервера на второй. С помощью правил iproute2 мы будем "пропихивать" в наш VPN канал ко второму серверу трафик приходящие от клиентов сети 10.1.1.1
Правила iproute2.
echo '150 vpn.out' >> /etc/iproute2/rt_tablesip rule add from 10.1.1.0/24 table vpn.outip route add default dev tun1 table vpn.out
Но эти правила должны добавляться только когда клиент уже соединился
Для этого создадим файл в директории /etc/openvpn/clietns/client1_routes.sh
#!/bin/ship rule add from 10.1.1.0/24 table vpn.outip route add default dev tun1 table vpn.outexit 0
В скрипт конфиг клиента добавим строки
script-security 2 up upstream-route.sh
Далее проверяем
nohup openvpn --config client.conf &
И добавляем наши правила firewall и поднятие клиента в автозапуск, например в
/etc/rc.local
nohup openvpn --config client.conf &
iptables-restore</etc/sysconfig/firewall_rules.sh