LINUX.ORG.RU
ФорумAdmin

Объединение подсетей филиалов с помощью OpenVPN


0

1

Стоит задача объединить подсети двух офисов для использования общих шар Samba и доступа к почте (на сервере одного из офисов стоит Dovecot; подключаться нужно из обоих офисов по IMAP). Настроил серверы на Gentoo, раздачу интернета сделал через NAT. Также настроил и OpenVPN. Проблема в том что, туннель поднимается, серверы друг друга пингуют, но вот компьютеры внутренней сети сервер другого офиса не видят. Полагаю, надо добавить правила в NAT, но не знаю какие.

Правила iptables (типовой из манов Gentoo):

#Copy and paste these examples ...
export LAN=br0
export WAN=ppp0

#First we flush our current rules
iptables -F
iptables -t nat -F

#Setup default policies to handle unmatched traffic
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

#Then we lock our services so they only work from the LAN
iptables -I INPUT 1 -i ${LAN} -j ACCEPT
iptables -I INPUT 1 -i lo -j ACCEPT
iptables -A INPUT -p UDP --dport bootps ! -i ${LAN} -j REJECT
iptables -A INPUT -p UDP --dport domain ! -i ${LAN} -j REJECT

#(Optional) Allow access to our ssh server from the WAN
iptables -A INPUT -p TCP --dport ssh -i ${WAN} -j ACCEPT

#Drop TCP / UDP packets to privileged ports
iptables -A INPUT -p TCP ! -i ${LAN} -d 0/0 --dport 0:1023 -j DROP
iptables -A INPUT -p UDP ! -i ${LAN} -d 0/0 --dport 0:1023 -j DROP

#Finally we add the rules for NAT
iptables -I FORWARD -i ${LAN} -d 192.168.0.0/255.255.0.0 -j DROP
iptables -A FORWARD -i ${LAN} -s 192.168.0.0/255.255.0.0 -j ACCEPT
iptables -A FORWARD -i ${WAN} -d 192.168.0.0/255.255.0.0 -j ACCEPT
iptables -t nat -A POSTROUTING -o ${WAN} -j MASQUERADE

route -n (сервер OpenVPN)

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
81.89.80.123    0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
10.50.123.2     0.0.0.0         255.255.255.255 UH    0      0        0 tun0
10.50.123.0     10.50.123.2     255.255.255.252 UG    0      0        0 tun0
10.50.123.0     10.50.123.2     255.255.255.0   UG    0      0        0 tun0
192.168.2.0     10.50.123.2     255.255.255.0   UG    0      0        0 tun0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 br0
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo
0.0.0.0         81.89.80.123    0.0.0.0         UG    0      0        0 ppp0
route -n (клиент OpenVPN)
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
78.29.3.102     10.50.0.1       255.255.255.255 UGH   0      0        0 eth0
10.50.123.1     0.0.0.0         255.255.255.255 UH    0      0        0 tun0
10.100.222.102  0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
95.129.163.56   10.50.0.1       255.255.255.248 UG    0      0        0 eth0
10.100.12.0     10.50.0.1       255.255.255.0   UG    0      0        0 eth0
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 br0
192.168.1.0     10.50.123.1     255.255.255.0   UG    0      0        0 tun0
78.29.0.0       10.50.0.1       255.255.254.0   UG    0      0        0 eth0
10.50.0.0       0.0.0.0         255.255.252.0   U     0      0        0 eth0
109.191.64.0    10.50.0.1       255.255.192.0   UG    0      0        0 eth0
10.128.0.0      10.50.0.1       255.248.0.0     UG    0      0        0 eth0
10.48.0.0       10.50.0.1       255.240.0.0     UG    0      0        0 eth0
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo
0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        0 ppp0

Ответ на: комментарий от dreamer

Офис 1: 192.168.1.0 Офис 2: 192.168.2.0

Адреса у серверов в туннеле соответственно 10.50.123.1 и .2

Пока надо чтобы с компов офиса 1 можно было заходить на сервер офиса 1 (192.168.1.1 или 10.50.123.1; требуются Samba и IMAP)

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

> с компов офиса 1 можно было заходить на сервер офиса 1

здесь все верно?


сделай трейс с сервера1 до сети офиса2 и наоборот
+трейсы изнутри сети до другой.

dreamer ★★★★★
()
Ответ на: комментарий от dreamer

Тупанул. С компов офиса 2 заходить на сервер офиса 1. Конкретная задача: запускать Thunderbird в обоих офисах, чтобы просматривать почту через IMAP, который запущен на сервере офиса 1.

MahMahoritos ★★★
() автор топика
# EXAMPLE: Suppose the client
# having the certificate common name "Thelonious"
# also has a small subnet behind his connecting
# machine, such as 192.168.40.128/255.255.255.248.
# First, uncomment out these lines:
;client-config-dir ccd
;route 192.168.40.128 255.255.255.248
# Then create a file ccd/Thelonious with this line:
#   iroute 192.168.40.128 255.255.255.248
# This will allow Thelonious' private subnet to
# access the VPN.  This example will only work
# if you are routing, not bridging, i.e. you are
# using "dev tun" and "server" directives.
anton_jugatsu ★★★★
()
Ответ на: комментарий от MahMahoritos

А вот это уже интересно... Набрал в офисе 2 с компа внутренней сети ping 10.50.123.1, т.е адрес сервера в офисе 1 и пинг пошел. А вот 192.168.1.1 он воспринимать не хочет, хотя это тот же комп, просто адрес из локальной подсети.

В чем подвох?

MahMahoritos ★★★
() автор топика
Ответ на: комментарий от anton_jugatsu

>;client-config-dir ccd

;route 192.168.40.128 255.255.255.248

Аналогичная строка прописана и раскомментирована

192.168.1.0 10.50.123.1 255.255.255.0 UG 0 0 0 tun0

Вроде вот как раз маршрут, который позволяет видеть подсеть другого офиса.

MahMahoritos ★★★
() автор топика

1. Являются ли оба сервака шлюзами по умолчанию для своих локалок? Если нет, добавь маскарад на локальных интерфейсах.
2. Правильная настройка маршрутизации делается вписыванием «iroute подсеть_клиента маска» в файл из каталога ccd, название которого совпадает с CN клиента.
3. В форварде у тебя бардак какой-то. Почитай мануалы по iptables, а пока выставь -P FORWARD ACCEPT и очисти цепочку.

P.S. Про ip_forward=1 не забывай.

nnz ★★★★
()
Ответ на: комментарий от nnz

>2. Правильная настройка маршрутизации делается вписыванием «iroute подсеть_клиента маска» в файл из каталога ccd, название которого совпадает с CN клиента.

Это для доступа из подсети сервера к подсети клиента. Чтобы наоборот — push «route подсеть_сервака маска» опять же в конфиге сервака.

nnz ★★★★
()
Ответ на: комментарий от nnz

1) Да, являются. Все параметры раздаются через dnsmasq и шлюз по умолчанию выставляется верный (сервер своей подсети) 2) Вроде бы все route и push route прописаны:

Офис 1 (сервер OpenVPN)

client-config-dir ccd
route 10.50.123.0 255.255.255.252
route 192.168.2.0 255.255.255.0
ServerLL ~ # cat /etc/openvpn/ccd/client1
ifconfig-push 10.50.123.2 10.50.123.1
iroute 192.168.2.0  255.255.255.0
Офис 2 (клиентOpenVPN)
ServerLE ~ # cat /etc/openvpn/openvpn-up.sh
#!/bin/sh
/sbin/route add -net 192.168.1.0 10.50.123.1
Да и оба сервака пингуют машины обоих подсетей. Вот как серверы пингуют свою и соседнюю подсеть (где-кто видно по пингам, они симметричные):
ServerLL ~ # ping 192.168.1.40 -c2
PING 192.168.1.40 (192.168.1.40) 56(84) bytes of data.
64 bytes from 192.168.1.40: icmp_req=1 ttl=64 time=0.541 ms
64 bytes from 192.168.1.40: icmp_req=2 ttl=64 time=0.514 ms

--- 192.168.1.40 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.514/0.527/0.541/0.026 ms
ServerLL ~ # ping 192.168.2.40 -c2
PING 192.168.2.40 (192.168.2.40) 56(84) bytes of data.
64 bytes from 192.168.2.40: icmp_req=1 ttl=63 time=21.8 ms
64 bytes from 192.168.2.40: icmp_req=2 ttl=63 time=20.1 ms

--- 192.168.2.40 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 20.113/20.976/21.839/0.863 ms
ServerLE ~ # ping 192.168.1.40 -c2
PING 192.168.1.40 (192.168.1.40) 56(84) bytes of data.
64 bytes from 192.168.1.40: icmp_req=1 ttl=63 time=21.6 ms
64 bytes from 192.168.1.40: icmp_req=2 ttl=63 time=20.7 ms

--- 192.168.1.40 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 20.791/21.241/21.691/0.450 ms
ServerLE ~ # ping 192.168.2.40 -c2
PING 192.168.2.40 (192.168.2.40) 56(84) bytes of data.
64 bytes from 192.168.2.40: icmp_req=1 ttl=64 time=0.597 ms
64 bytes from 192.168.2.40: icmp_req=2 ttl=64 time=0.541 ms

--- 192.168.2.40 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.541/0.569/0.597/0.028 ms

3) с iptables и правда не знаком, слизал правила из Home Router Guide документации Gentoo. Похоже, что все-таки в них проблема и надо какое-то правило добавить

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

Все-таки поборол. Правда скорее методом полуосознанного тыка. Похоже, и правда ерунда была в FORWARD. Пока оставил такой вариант правил, но не уверен, не осталось ли дыр, которые лучше закрыть. Могли бы посмотреть, указать грубые ошибки.

#Copy and paste these examples ...
export LAN=br0
export WAN=ppp0
#export VPN=tun0

#First we flush our current rules
iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -X

#(Optional) Allow access to our ssh server from the WAN
iptables -A INPUT -p TCP --dport ssh -i ${WAN} -j ACCEPT

#Finally we add the rules for NAT
iptables -t nat -A POSTROUTING -o ${WAN} -j MASQUERADE
iptables -A FORWARD -i ${LAN} -j ACCEPT

#Options for OpenVPN
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A OUTPUT -o tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A FORWARD -o tun+ -j ACCEPT

/etc/init.d/iptables save
MahMahoritos ★★★
() автор топика
Ответ на: комментарий от MahMahoritos

Основная ошибка в «изучение» iptables в копирование всяких непонятных конфигов (скриптов) из интернета. В кавычках, потому что это тесно связано со стеком TCP/IP в принципе. Так вот, о чём это я, а, возми вдумчиво прочитай http://ru.wikipedia.org/wiki/Iptables, затем возьми листок бумаги и карандаш и нарисуй схему: какие у тебя сервисы, какие пакеты следует пускать, какие нет и т.д. Потом «просто» реализуй это на iptables (да хотя на pf) в ручную без всяких скриптов, с созданием, если надо, говорящих пользовательских цепочек -N tcp_allowed и комментариев -m comment.

anton_jugatsu ★★★★
()
Ответ на: комментарий от MahMahoritos

>/sbin/route add -net 192.168.1.0 10.50.123.1

Я бы не сказал, что это идеологически правильно. Имхо, все-таки лучше на сервере добавить push «route 192.168.1.0 255.255.255.0».

С фаерволом, как вижу, ты уже вроде разрулился, но все-таки очень советую прислушаться к комментарию anton_jugatsu — дело говорит человек.

nnz ★★★★
()
Ответ на: комментарий от nnz

Спасибо, попробую вариант с рисованием схем, может хоть чуть-чуть поможет. Вообще довольно слабо понимаю, как различные цепочки функционируют.

MahMahoritos ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.