LinuxForum.Fans
Тема

Соединение офисов с помощью OpenVPN

Автор: madest89 2 сообщений 2674 просмотров
#231643

Здравствуйте!

Стоит задача объединить офисы компании (филиалы по различным областям). Для решения данной задачи выбрал OpenVPN, в качестве дистрибутива Debian. Что получилось: клиенты из филиалов видят сетку головного офиса - работают с ней, а клиенты головного офиса достучаться до компов филиалов не могут.

Ниже постараюсь максимально подробно изложить настройки и архитектуру сети.
PS: буду признателен любой помощи, спасибо!

Что имеем

1. Сеть№1 (головной офис):
========================
Для выхода в интернет провайдер предлагает pppoe соединение. Для поднятия последнего использую роутер, на котором настроен проброс портов с 1024 по 65535 (для любого протокола). После роутера трафик приходит на шлюз с двумя сетевыми картами (eth0 и eth1 соответственно). Схематично это выглядит следующим образом:

PPPOE 192.168.0.1 192.168.1.1(eth1)
Интернет <==========> | Роутер | <=============> | Шлюз | <==============> | Локальная сеть головного офиса (192.168.1.0/24)|
217.170.1.1 192.168.0.2(eth0) 192.168.1.0/24

IP на выходе в интернете: 217.170.1.1
IP Роутера: 192.168.0.1
IP шлюза (eth0 - смотрит в сетку роутера): 192.168.0.2
IP шлюза (eth1 - смотрит в сетку офиса): 192.168.1.1

все адреса статические.

2. Сеть№2 (филиал):

Провайдер обеспечивает выход в интернет "напрямую", без необходимости поднятия виртуальных интерфейсов. Для раздачи интернета используется аналогичным образом настроенный жлюз. Схематично это выглядит следующим образом:

eth0 eth1
Интернет <===========> | Шлюз | <===========> | Локальная сеть филиала (192.168.2.0/24) |
217.170.2.1 192.168.2.1

Настройки шлюза:
IP Адрес в Интернете (eth0): 217.170.2.1
IP Адрес для связи с локалкой (eth1): 192.168.2.1

все адреса статические.

Выше, по возможности, максимально подробно описана структура сетей. Теперь собственно сама VPN - сеть.

3. Сеть №3 (VPN сеть)

В качестве VPN - сервера выступает шлюз первой сети. в качестве клиента - шлюз сети №2.
В качестве VPN - сети используется подсеть 192.168.255.0/24.
Конфигурационный файл VPN сервера:

Показать

# [NETWORK SETTINGS]

port 2000
proto tcp
dev tun0

# [KEYS PATCH]

ca /etc/openvpn/keys/office1/ca.crt
cert /etc/openvpn/keys/office1/server.crt
key /etc/openvpn/keys/office1/server.key
dh /etc/openvpn/keys/office1/dh2048.pem

# [ROUTE]

server 192.168.255.0 255.255.255.0
route 192.168.2.0 255.255.255.0
push "route 192.168.1.0 255.255.255.0"
client-to-client

# [COMPRESS TRAFIC]

comp-lzo

# [PACKET SETTINGS]

cipher BF-CBC
keepalive 10 60

# [LOG]

status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log
verb 3

Конфигурационный файл VPN-клиента (Сеть №2):

Показать

dev tun1
proto tcp
remote 217.170.1.1
port 2000
client
pull
ca /etc/openvpn/keys/office1/ca.crt
cert /etc/openvpn/keys/office1/client.crt
key /etc/openvpn/keys/office1/client.key
dh /etc/openvpn/keys/office1/dh2048.pem

comp-lzo

cipher BF-CBC

verb 3
log /var/log/openvpn/office1.log

4. Настройки iptables

На обоих шлюзах стоят правила "всё разрешено, ничего не запрещено" (в целях диагностики). Инет в локалку раздаётся по SNAT, за исключение HTTP (через Squid). На VPN интерфейсах включён MASQUERADE.

4.1 Сеть №1

Показать

#!/bin/bash

# Constants

INET="eth0"
INET_IP="192.168.0.2"
LOCAL="eth1"
LOCAL_IP="192.168.1.1"
LOCAL_RANGE="192.168.1.0/255.255.255.192" # 192.168.1.1-192.168.1.62
EXT_IP="217.170.1.1"
TV="192.168.1.36"

VPN="tun+"

LEVEL1="NEW"
LEVEL2="NEW,ESTABLISHED"


# Enable kernel modules

echo "1" > /proc/sys/net/ipv4/ip_forward

# Flush all chains

iptables -t nat -X
iptables -t nat -F
iptables -t filter -X
iptables -t filter -F
iptables -t mangle -X
iptables -t mangle -F

# Set up default rules

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

# NAT_chain

iptables -t nat -A PREROUTING -p tcp -i $LOCAL -m multiport --destination-ports 80,8080 -j REDIRECT --to-ports 3128
iptables -t nat -A POSTROUTING --source $LOCAL_RANGE --out-interface $INET --destination 0/0 -j SNAT --to-source $INET_IP
iptables -t nat -A POSTROUTING --out-interface $VPN -j MASQUERADE
# FILTER_chain
# INPUT

4.2 Сеть №2

Показать

#!/bin/bash

# Constants

INET="eth0"
INET_IP="217.170.2.1"
LOCAL="eth1"
LOCAL_IP="192.168.2.1"
LOCAL_RANGE="192.168.2.0/255.255.255.0"

VPN="tun+"

LEVEL1="NEW"
LEVEL2="NEW,ESTABLISHED"
LEVEL3="RELATED,ESTABLISHED"


# Enable kernel modules

echo "1" > /proc/sys/net/ipv4/ip_forward

# Flush all chains

iptables -t nat -X
iptables -t nat -F
iptables -t filter -X
iptables -t filter -F
iptables -t mangle -X
iptables -t mangle -F

# Set up default rules

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

# NAT_chain

iptables -t nat -A PREROUTING -p tcp -i $LOCAL -m multiport --destination-ports 80,8080 -j REDIRECT --to-ports 3128
iptables -t nat -A POSTROUTING --source $LOCAL_RANGE --out-interface $INET --destination 0/0 -j SNAT --to-source $INET_IP
iptables -t nat -A POSTROUTING --out-interface $VPN -j MASQUERADE
# FILTER_chain
# INPUT

5. Маршрутизация.

После установки соединения между VPN - сервером и VPN - клиентом, имеем следующие маршруты на шлюзах.

5.1 Сеть №1

Показать

192.168.255.2 dev tun0 proto kernel scope link src 192.168.255.1
192.168.2.0/24 via 192.168.255.2 dev tun0
192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.1
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.2
192.168.255.0/24 via 192.168.255.2 dev tun0
default via 192.168.0.1 dev eth0

5.2 Сеть №2

Показать

192.168.255.5 dev tun1 proto kernel scope link src 192.168.255.6
217.170.2.1/30 dev eth0 proto kernel scope link src 217.170.2.1
192.168.2.0/24 dev eth1 proto kernel scope link src 192.168.2.1
192.168.1.0/24 via 192.168.255.5 dev tun1
192.168.255.0/24 via 192.168.255.5 dev tun1
default via 217.170.2.1 dev eth0
#231788

Какой-то бред с маршрутами:
192.168.255.2 dev tun0 proto kernel scope link src 192.168.255.1

192.168.255.5 dev tun1 proto kernel scope link src 192.168.255.6

То ли они имеют адреса 1 и 2, то ли 5 и 6.

Я настраивал по этой инструкции http://www.ylsoftware.com/news/393

Нравится то, что сервак сообщает маршруты каждому клиенту отдельно опцией push "route 192.168.2.0 255.255.255.0 192.168.10.1" и т.д

Недавно обсуждали- если правильно прописаны маршруты, эта строчка нафиг не нужна iptables -t nat -A POSTROUTING --out-interface $VPN -j MASQUERADE

Войдите или зарегистрируйтесь, чтобы ответить.