OpenVPN, пример использования
Приведу небольшой пример, как объединить две сети, географически удалённые друг от друга. Используем Linux, OpenVPN. Расположение и структура файлов от fedora core.
Итак, что мы имеем. А имеем мы два офиса, назовём их o1 и o2. В каждом протянута локальная сеть. В каждом есть свой интернет-провайдер и интернет-шлюз на базе Linux (fw1 и fw2 соответственно). Что мы хотим: чтобы у нас было одно адресное пространство 192.168.0.0/24 и прозрачная работа сети.
Пусть у шлюзов будут адреса 192.168.0.1 для fw1 и 192.168.0.2 для fw2.
Для успешного функционирования при проблемах с Интернетом и минимизации трафика на каждом шлюзе будет стоять сервер dhcp. Этим, естественно будет заниматься демон dhcpd. Настройки его таковы (/etc/dhcpd.conf):
для fw1
ddns-update-style none;
ignore client-updates;
subnet 192.168.0.0 netmask 255.255.255.0 {
option routers 192.168.0.1;
option subnet-mask 255.255.255.0;
option domain-name "mynetwork";
option domain-name-servers 192.168.0.1;
range 192.168.0.10 192.168.0.200;
}
для fw2
ddns-update-style none;
ignore client-updates;
subnet 192.168.0.0 netmask 255.255.255.0 {
option routers 192.168.0.2;
option subnet-mask 255.255.255.0;
option domain-name "mynetwork";
option domain-name-servers 192.168.0.2;
range 192.168.0.201 192.168.0.254;
}
Как видно, диапазоны ip не пересекаются.
Кроме того, на каждом шлюзе установим bind для кэширования dns-запросов и поддержания локальной dns.
Не буду приводить полный файл конфигурации, желающие найдут нужную информацию. Предположим, что это /etc/named.conf.
fw1:
options {
directory "/var/named";
forwarders {
/* тут ip сервера dns для первого провайдера */
};
allow-transfer { 192.168.0.2; };
allow-query { 192.168.0.0/24; };
};
/* локальный домен mynetwork. Описание зоны в файле /var/named/mynetwork */
zone "mynetwork" {
type master;
file "mynetwork";
};
fw2:
options {
directory "/var/named";
forwarders {
/* тут ip сервера dns для второго провайдера */
};
allow-transfer { none; };
allow-query { 192.168.0.0/24; };
};
/* локальный домен mynetwork. Дамп зоны в файле /var/named/mynetwork */
zone "mynetwork" {
type slave;
masters { 192.168.0.1; };
file "mynetwork.dump";
};
Таким образом, мы минимализируем запросы к локальной dns между сетями, что сэкономит трафик и уменьшит нагрузку на сеть, а так же обеспечит некоторую отказоустойчивость.
Приступим к конфигурации openvpn.
Советы по начальной установке и подробную инструкцию тоже пропущу. Кому надо - найдут. Шаги такие:
1. установим OpenVPN на оба шлюза
2. создадим серверный ключ на fw1
3. создадим клиентский ключ для fw2 на fw1
4. перенесём клиентский ключ и сертификат ca.crt с fw1 на fw2
Примемся за конфиг fw1 (тоже приведён не весь) /etc/openvpn/server.conf
port 1194
;протокол udp выбран из-за меньшей нагрузки на сеть в сравнении с tcp
proto udp
dev tap
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key # This file should be kept secret
server-bridge 192.168.0.1 255.255.255.0 192.168.0.3 192.168.0.9
; обеспечим сжатие
comp-lzo
В данном случае мы указываем, что openvpn запускается в качестве сервера с адресом 192.168.0.1, маской /24 и выдаёт адреса от .3 до .9 , слушает порт 1194 (стандартный), использует устройство tap (об этом чуть позже).
fw2: /etc/openvpn/client.conf
client
dev tap
proto udp
remote ip_of_fw1 1194
resolv-retry infinite
nobind
ca keys/ca.crt
cert keys/clnt.crt
key keys/clnt.key
comp-lzo
up /etc/openvpn/addiftobr
Здесь мы указываем, чтобы клиент (client) соединялся с fw1 по внешнему адресу последнего и после этого запускал скрипт /etc/openvpn/addiftobr
Сам скрипт не сложен:
#!/bin/sh
/usr/sbin/brctl addif br0 tap0
/sbin/ifconfig tap0 0.0.0.0 promisc up
Смысл такой. На fw1 подымается мост (bridge) br0:
/etc/sysconfig/network-scripts/ifcfg-br0:
DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
IPADDR=192.168.0.1
NETMASK=255.255.255.0
ONBOOT=yes
DELAY=0
в него складывается интерфейс внутренней сети (предположим, eth0):
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
TYPE=Ethernet
BRIDGE=br0
После запуска openvpn в качестве сервера, автоматически создаётся устройство tap0, через которое демон гоняет свой трафик. А tap0 тоже складывается в br0.
На fw2 почти так же. Создаётся мост, куда помещается внутренний интерфейс. ip у моста статический 192.168.0.2. Подробнее о мостах ищите в документации. После запуска openvpn в качестве клиента создастся устройство tap0 и выполнится скрипт помещения его в мост.
И не забываем перекрыть пакеты dhcp через Интернет:
iptables -A FORWARD -p udp -m udp --dport 67 -j DROP
на обоих шлюзах.
Если всё получится успешно, то мы можем без проблем пользоваться ресурсами сети как единым целым, не боясь за безопасность, ведь трафик шифруется.
Четырнадцатое шестнадцатого
Одну неделю назад

0 комментариев(ий):
Отправить комментарий