Пошаговое руководство настройки OpenVpn в Ubuntu 14

Автор Itworkroom

Пошаговое руководство настройки OpenVpn в Ubuntu 14

Объединяем локальные сети используя OpenVpn и Arno-Iptables-Firewall в ОС Ubuntu.
В данном пошаговом руководстве мы объединяем 3 и более офиса (Москва, Питер и Астана), каждый со своей подсетью в единую локальную сеть используя операционную систему Ubuntu, ПО OpenVPN и Arno-Iptables-Firewall (можно и другой, по желанию).

Сервер OpenVPN будем настраивать через виртуальный сетевой драйвер ядра системы tun. Подразумевается что каждый сервер с 2 сетевыми картами, одна из которых смотрит в интернет, вторая в локальную сеть. Обязательно на ведущем сервере (в нашем случае OpenVPN в Москве) должен быть статический IP адрес, так как к нему будут подключатся остальные сервера клиенты офисов.

Сетевые карты на всех серверах:

eth0 – Локальная сеть (LAN)
eth1 – Интернет (WAN)

Как настроить сетевые интерфейсы на каждом сервере смотрите здесь: сетевого подключения и настройка сетевых карт на сервере в Debian, Ubuntu

Для внутренней VPN сети выделена подсеть:

VPN: 10.10.10.0/24

Сетевая адресация локальных сетей по офисам, каждый сервер имеет свой привязанный IP в подсети VPN:

VPN Сервер Москва:

Внешний IP: 111.222.333.444
Локальная сеть: 172.16.20.0/24
IP VPN: 10.10.10.1
——————————
VPN клиент Питер:

Локальная сеть: 172.16.30.0/24
IP VPN: 10.10.10.5
——————————
VPN клиент Астана:

Локальная сеть: 172.16.40.0/24
IP VPN: 10.10.10.9

Установка и настройка OpenVPN сервера:

Устанавливаем OpenVPN сервер и пакет easy-rsa на VPN Сервер Москва выполнив команду:

aptitude install openvpn easy-rsa

Копируем скрипты для формирования ключей и сертификатов выполнив команду:

cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa/

Отредактируем основные параметры в файле /etc/openvpn/easy-rsa/vars, чтобы не прописывать каждый раз параметры когда будем создавать пользователей:

vi /etc/openvpn/easy-rsa/vars

export KEY_COUNTRY=»RU»
export KEY_PROVINCE=»36″
export KEY_CITY=»Voronej»
export KEY_ORG=»Firma»
export KEY_EMAIL=»adminu@mail.ru»

Переходим в скопированную папку:

cd /etc/openvpn/easy-rsa/

Инициализируем Public Key Infrastructure переменные, выполнив команды:

. ./vars или source ./vars
./clean-all

Генерируем (CA) корневой сертификат и ключ выполнив команду:

./build-ca

Параметры подхватятся из файла vars. Только параметры Organizational Unit Name и Name -необходимо указать явно:

Organizational Unit Name [ ]: и Company Name [ ]: forVpn

Генерируем параметры и ключ Диффи Хельмана:

./build-dh

Генерируем сертификат и секретный ключ сервера:

./build-key-server server

Все параметры принимаем по умолчанию. Большинство параметров подхватятся из файла vars. Только параметр Name необходимо указать явно Name [ ]: server

Если планируется использовать tls-auth, который позволит скрыть порт на котором сервер слушает vpn подключения или защититься от DoS атак, генерируем ключ:

openvpn —genkey —secret ./keys/ta.key

Добавим сразу и ключи для наших двух офисов, которые будут подключатся к серверу OpenVPN:

./build-key Piter
./build-key Astana

Все параметры принимаем по умолчанию. На запрос Name вводим соответственно названия офиса: office1, Piter.

Если в дальнейшем Вам понадобится добавить еще один офис либо несколько удаленных сотрудников, необходимо выполнить команду:

. ./vars или source ./vars

Далее командой ./build-key user добавляем необходимое количество клиентов OpenVPN сервера, не забываем создать ccd файл для нового клиента VPN сети.

Создадим папку ccd:

mkdir -p /etc/openvpn/easy-rsa/ccd/

Создадим ccd файл для каждого офиса, в котором пропишем постоянный IP (IP выбираем из таблицы IP в статье выше) и маршруты:

Создаем ccd файл для офиса 2 выполнив команду:

echo ‘

#disable
ifconfig-push 10.10.10.5 10.10.10.6 
iroute 172.16.30.0 255.255.255.0 # Маршрут в сеть клиента. Требуется для доступа к сетевым устройствам в сети клиента.
push «route 172.16.20.0 255.255.255.0» # Задаем маршрут для клиента, чтобы он видел сеть за OpenVPN-сервером.
push «route 172.16.40.0 255.255.255.0»

‘ > /etc/openvpn/easy-rsa/ccd/Piter

Создаем ccd файл для VPN клиента в г Астана выполнив команду:

echo ‘

#disable
ifconfig-push 10.10.10.9 10.10.10.10
iroute 172.16.40.0 255.255.255.0
push «route 172.16.20.0 255.255.255.0»
push «route 172.16.30.0 255.255.255.0»

‘ > /etc/openvpn/easy-rsa/ccd/Astana

Внимание! Если одног из клиентов надо будет в дальнейшем отключить, то раскоментируем параметр disable убрав символ комментария #

Создаем конфигурационный файл OpenVPN сервера выполнив команду:

echo ‘

dev tun
port 1194
proto udp
tls-server

server 10.10.10.0 255.255.255.0
ifconfig 10.10.10.1 10.10.10.2

route 172.16.30.0 255.255.255.0 # Подсеть Piter
route 172.16.40.0 255.255.255.0 # Подсеть Astana

ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/server.crt
key /etc/openvpn/easy-rsa/keys/server.key
dh /etc/openvpn/easy-rsa/keys/dh2048.pem

client-to-client
client-config-dir /etc/openvpn/easy-rsa/ccd
comp-lzo
persist-tun
persist-key
verb 3
keepalive 10 60

ifconfig-pool-persist ipp.txt # В данном файле будут храниться ip адреса клиентов
log-append /var/log/openvpn.log
status /var/log/openvpn_status.log

‘ > /etc/openvpn/server.conf

Создаем папки, куда скопируем ключи и конфигурационные файлы для клиентов:

mkdir -p /etc/openvpn/users/Piter
mkdir -p /etc/openvpn/users/Astana

Создадим конфигурационный файл для VPN клиента в г Питер предварительно изменив ip_openvpn_server на внешний IP сервера VPN Сервера Москва либо доменное имя:

echo ‘

remote ip_openvpn_server 1194
client
dev tun
proto udp
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert Piter.crt
key Piter.key
comp-lzo
verb 4
mute 20
verb 3
#redirect-gateway
log-append /var/log/openvpn_Piter_to_vpnserverMoscow.log

‘ > /etc/openvpn/users/Piter/Piter.conf

Создадим конфигурационный файл для VPN клиент Астана предварительно изменив ip_openvpn_server на внешний IP VPN Сервера Москва либо доменное имя:

echo ‘

remote ip_openvpn_server 1194
client
dev tun
proto udp
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert Astana.crt
key Astana.key
comp-lzo
verb 4
mute 20
verb 3
#redirect-gateway
log-append /var/log/openvpn_Astana_to_vpnserver.log

‘ > /etc/openvpn/users/Astana/Astana.conf

Внимание! Если необходимо чтобы вся сеть офиса в Питере либо офиса в Астане, или подключаемого удаленного сотрудника проходила через VPN главного сервера (в Москве), например для сокрытия внешнего IP рас комментируйте параметр redirect-gateway, убрав #. После всех манипуляций необходимо разрешить NAT, для IP VPN нужного клиента на офисном сервере, именно параметр NAT_INTERNAL_NET=»» в файле /etc/arno-iptables-firewall/conf.d/00debconf.conf. Если необходимо добавить несколько IP, они разделяются запятой.

Скопируем сертификаты и ключ для VPN клиент Питер и VPN клиент Астана:

cp /etc/openvpn/easy-rsa/keys/Piter.key /etc/openvpn/users/Piter/
cp /etc/openvpn/easy-rsa/keys/Piter.crt /etc/openvpn/users/Piter/
cp /etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn/users/Piter/

cp /etc/openvpn/easy-rsa/keys/Astana.key /etc/openvpn/users/Astana/
cp /etc/openvpn/easy-rsa/keys/Astana.crt /etc/openvpn/users/Astana/
cp /etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn/users/Astana/

Архивируем папку с ключами для каждого офиса:

cd /etc/openvpn/users/

tar cf — Piter/ | gzip -c -9 > Piter.tgz
tar cf — Astana/ | gzip -c -9 > Astana.tgz

Копируем архив с ключами на сервера офисов:
Копируем на сервера VPN клиент Питер и VPN клиент Астана при наличии внешнего IP командой:

scp -P22 /etc/openvpn/users/Piter.tgz root@ip_Piter:/etc/openvpn/
scp -P22 /etc/openvpn/users/Astana.tgz root@ip_Astana:/etc/openvpn/

Если нет внешнего IP, тогда копируем с сервера VPN клиент Питер и VPN клиент Астана так:

scp -P22 root@ip_vpvSrvMoscow:/etc/openvpn/users/Piter.tgz /etc/openvpn/
scp -P22 root@ ip_vpvSrvMoscow:/etc/openvpn/users/Astana.tgz /etc/openvpn/

На сервере VPN клиент Питер распаковываем архив выполнив команды:

cd /etc/openvpn/
tar xvf Piter.tgz
mv Piter/* .
rmdir Piter/

На сервере VPN клиент Астана распаковываем архив выполнив команды:

cd /etc/openvpn/
tar xvf Astana.tgz
mv Astana/* .
rmdir Astana/

Включаем ipv4_forwarding

В /etc/sysctl.conf расскомментируем

#net.ipv4.ip_forward=1 после чего sudo sysctl -p

Далее перегружаем (/etc/init.d/openvpn restart) сервер OpenVPN на каждом сервере и через пробуем пинговать ip адреса vpn сети 10.10.10.1, 10.10.10.5 и 10.10.10.9.

Устанавливаем и настраиваем Arno-Iptables-Firewall

Настроим Firewall, чтобы иметь доступ к локальным сетям.

Устанавливаем Firewall Arno-Iptables-Firewall командой:

aptitude install arno-iptables-firewall

Отвечаем на вопросы мастера и настраиваем Arno-Iptables-Firewall:

Настройка Firewall на VPN Сервере в Москве:
Сразу открываем порты tcp 22 и udp 1194 порт:

vi /etc/arno-iptables-firewall/conf.d/00debconf.conf

EXT_IF=»eth1″
EXT_IF_DHCP_IP=1
OPEN_TCP=»22″
OPEN_UDP=»1194″
INT_IF=»eth0 tun+»
NAT=1
INTERNAL_NET=»172.16.20.0/24 172.16.30.0/24 172.16.40.0/24 10.10.10.0/24″
NAT_INTERNAL_NET=»»
OPEN_ICMP=1

 

Файл /etc/arno-iptables-firewall/custom-rules редактируем до состояния:

# openvpn Server
iptables -I FORWARD -i eth0 -o tun0 -j ACCEPT
iptables -I FORWARD -i tun0 -o eth0 -j ACCEPT
iptables -I INPUT -i tun0 -p tcp —dport 121 -j ACCEPT
iptables -I INPUT -i tun0 -p tcp —dport 21 -j ACCEPT
iptables -I INPUT -i tun0 -p tcp —dport 80 -j ACCEPT
iptables -I INPUT -i tun0 -p tcp —dport 53 -j ACCEPT
iptables -I INPUT -i tun0 -p udp —dport 53 -j ACCEPT
iptables -I INPUT -i tun0 -p udp —dport 69 -j ACCEPT
iptables -I INPUT -i tun0 -p tcp —dport 443 -j ACCEPT
iptables -I INPUT -i tun0 -p tcp —dport 139 -j ACCEPT
iptables -I INPUT -i tun0 -p tcp —dport 445 -j ACCEPT
iptables -I INPUT -i tun0 -p udp —dport 137 -j ACCEPT
iptables -I INPUT -i tun0 -p udp —dport 138 -j ACCEPT
iptables -I INPUT -i tun0 -p tcp —dport 901 -j ACCEPT
iptables -I INPUT -i tun0 -p tcp —dport 9100 -j ACCEPT
iptables -I INPUT -i tun0 -p ICMP —icmp-type 8 -j ACCEPT
iptables -I INPUT -i tun0 -p ICMP —icmp-type 11 -j ACCEPT
iptables -t nat -A POSTROUTING -s 172.16.20.0/24 -o tun0 -j MASQUERAD

Настраиваем firewall Piter:
Аналогично открываем порты tcp 22 и udp 1194 порт:

vi /etc/arno-iptables-firewall/conf.d/00debconf.conf

EXT_IF=»eth1″
EXT_IF_DHCP_IP=1
OPEN_TCP=»22″
OPEN_UDP=»»
INT_IF=»eth0 tun+»
NAT=1
INTERNAL_NET=»172.16.20.0/24 172.16.30.0/24 172.16.40.0/24 10.10.10.0/24″
NAT_INTERNAL_NET=»»
OPEN_ICMP=1

Файл /etc/arno-iptables-firewall/custom-rules редактируем до состояния

# openvpn cl pt
iptables -I FORWARD -i eth0 -o tun0 -j ACCEPT
iptables -I FORWARD -i tun0 -o eth0 -j ACCEPT
iptables -I INPUT -i tun0 -p tcp —dport 121 -j ACCEPT
iptables -I INPUT -i tun0 -p tcp —dport 21 -j ACCEPT
iptables -I INPUT -i tun0 -p tcp —dport 80 -j ACCEPT
iptables -I INPUT -i tun0 -p tcp —dport 53 -j ACCEPT
iptables -I INPUT -i tun0 -p udp —dport 53 -j ACCEPT
iptables -I INPUT -i tun0 -p udp —dport 69 -j ACCEPT
iptables -I INPUT -i tun0 -p tcp —dport 443 -j ACCEPT
iptables -I INPUT -i tun0 -p tcp —dport 139 -j ACCEPT
iptables -I INPUT -i tun0 -p tcp —dport 445 -j ACCEPT
iptables -I INPUT -i tun0 -p udp —dport 137 -j ACCEPT
iptables -I INPUT -i tun0 -p udp —dport 138 -j ACCEPT
iptables -I INPUT -i tun0 -p tcp —dport 901 -j ACCEPT
iptables -I INPUT -i tun0 -p tcp —dport 9100 -j ACCEPT
iptables -I INPUT -i tun0 -p ICMP —icmp-type 8 -j ACCEPT
iptables -I INPUT -i tun0 -p ICMP —icmp-type 11 -j ACCEPT
iptables -t nat -A POSTROUTING -s 172.16.30.0/24 -o tun0 -j MASQUERADE

Настраиваем firewall Astana:
Аналогично открываем порт tcp 22

vi /etc/arno-iptables-firewall/conf.d/00debconf.conf

EXT_IF=»eth1″
EXT_IF_DHCP_IP=1
OPEN_TCP=»22″
OPEN_UDP=»»
INT_IF=»eth0 tun+»
NAT=1
INTERNAL_NET=»172.16.20.0/24 172.16.30.0/24 172.16.40.0/24 10.10.10.0/24″
NAT_INTERNAL_NET=»»
OPEN_ICMP=1

Файл /etc/arno-iptables-firewall/custom-rules редактируем до состояния

# Openvpn cl
iptables -I FORWARD -i eth0 -o tun0 -j ACCEPT
iptables -I FORWARD -i tun0 -o eth0 -j ACCEPT
iptables -I INPUT -i tun0 -p tcp —dport 121 -j ACCEPT
iptables -I INPUT -i tun0 -p tcp —dport 21 -j ACCEPT
iptables -I INPUT -i tun0 -p tcp —dport 80 -j ACCEPT
iptables -I INPUT -i tun0 -p tcp —dport 53 -j ACCEPT
iptables -I INPUT -i tun0 -p udp —dport 53 -j ACCEPT
iptables -I INPUT -i tun0 -p udp —dport 69 -j ACCEPT
iptables -I INPUT -i tun0 -p tcp —dport 443 -j ACCEPT
iptables -I INPUT -i tun0 -p tcp —dport 139 -j ACCEPT
iptables -I INPUT -i tun0 -p tcp —dport 445 -j ACCEPT
iptables -I INPUT -i tun0 -p udp —dport 137 -j ACCEPT
iptables -I INPUT -i tun0 -p udp —dport 138 -j ACCEPT
iptables -I INPUT -i tun0 -p tcp —dport 901 -j ACCEPT
iptables -I INPUT -i tun0 -p tcp —dport 9100 -j ACCEPT
iptables -I INPUT -i tun0 -p ICMP —icmp-type 8 -j ACCEPT
iptables -I INPUT -i tun0 -p ICMP —icmp-type 11 -j ACCEPT
iptables -t nat -A POSTROUTING -s 172.16.40.0/24 -o tun0 -j MASQUERADE

Внимание! Для того, чтобы все компьютеры за OpenVPN серверами видели машины другого офиса, они должны иметь шлюзом свой сервер, например, ПК в сети Питера 172.16.30.0.24 должны иметь шлюз 172.16.30.1.

Полезное:

cd /etc/openvpn/easy-rsa/
. ./vars
./revoke-full имя_сервера_или_клиента

Отключение автозапуска OpenVPN

/etc/default/openvpn
AUTOSTART=»none»

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

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