Пошаговое руководство настройки OpenVpn в Ubuntu 14
Пошаговое руководство настройки 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»
0