Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: [HOWTO] Шлюз интернета Squid + OpenVPN с центральным офисом  (Прочитано 16776 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ck80

  • Автор темы
  • Любитель
  • *
  • Сообщений: 76
    • Просмотр профиля
Стандартная ситуация с которой могут столкнуться многие сис.админы: Открылся новый офис, в нём необходимо обеспечить подключение к Интернет и связь с центральным офисом. Без лишних предисловий поделюсь своим опытом по установке такого функционала.



Дано:
 — Интернет шлюз на UbuntuServer в центральном офисе (server на схеме).
 — Новый шлюз Интернета в филиале (client). Для сервера я использовал обычный ПК 2ГГц, 1Гб ОЗУ, 160Гб ЖД и свеженький Ubuntu server 9.10.   
 — Интенрент соединение между ними.

Необходимо:   
 — Сотрудникам филиала иметь доступ в Интернет.   
 — Сотрудникам филиала иметь возможность работать с Сервером 1С в центральном офисе(1C_serv)
 — Сотрудникам филиала иметь возможность работать с Файлсервером в центральном офисе (Fileserv)

Приступим.
Для начала установим на наш новый компьютер в филиале операционную систему Ubuntu Server 9.10 и затем превратим его в шлюз. Процедура установки стандартная - никаких дополнительных пакетов сразу ставить не надо. Всё доустановим потом.
По окончании установки, перезагружаемся и начинаем поднимать прозрачный прокси сервер на Squid3. Почему прозрачный? Потому что легче будет проводить настройку на пользовательских компьютерах, а точнее вообще не понадобится никаких настроек, кроме прописывания шлюза.

Проверяем интерфейсы:
/etc/network/interfaces

auto lo
iface lo inet loopback

auto eth1
iface eth1 inet
staticaddress 77.247.220.1
netmask 255.255.255.0
gateway 77.247.220.1
dns-nameservers 77.247.220.2 77.247.220.3

auto eth0
iface eth0 inet
static address 169.254.1.1
netmask 255.255.255.0

Приступаем к установке Squid3, вводим команду:

sudo apt-get install squid3
По окончании установки, лезем в конфиг и прописываем наши настройки в соответствующих секциях конфига(для поиска в nano используйте ctrl+w):

sudo nano /etc/squid3/squid.conf
http_port 3128 transparent
acl our_networks src 169.254.0.21/24 #подставить вашу подсеть, например 192.168.0.1/24
acl localnet src 127.0.0.1/255.255.255.255
http_access allow our_networks #вместо our_netrorks здесь и выше можно написать любое имя
http_access allow localnet

Таким образом, мы получили прозрачный прокси сервер на порту 3128, с разрешённым доступом из сети 169.254.0.0/24. Сохраняем. Перезагружаем демон:

sudo /etc/init.d/squid3 restart
И последняя, но очень важная настройка сквида — это редикрет запросов из вашей локальной сети на порт прокси. Для этого потребуется внести новые правила в штатный файрвол iptables. Это делается следующими командами:

sudo iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.0.1:3128
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128

В первом правиле мы говорим файрволу занести в таблицу с именем nat, цепочку с именем PREROUTING, в которой прописано, что слушающий интернет интерфейс eth1 должен принимать входящий трафик по протоколу tcp на порт 80 и изменять путь назначения на адрес 192.168.0.1:3128
Во втором правиле мы говорим файрволу занести в таблицу с именем nat, цепочку с именем PREROUTING, в которой прописано, что локальный интерфейс eth0 должен принимать входящий трафик по протоколу tcp на порту 80 и перенаправлять его на эту же машину, но изменив порт на 3128, на котором висит squid.

Завершили настройку шлюза. Перезагружаться не надо. Можно проверить пропинговать какой-нибудь сайт с пользовательских машин, например 4.2.2.2 И чтобы до конца не зависеть от настроек провайдера, можно поставить собственный ДНС сервер, который будет переводить непонятные компьютеру адреса вроде ubuntu.ru или gmail.com на понятные 213.95.41.13 и 209.85.225.83 :)

Теперь приступим к настройке openVPN сервера и клиента. Это позволит нам соединить центральный офис и удалённый офис компании как бы в единую локальную сеть. Т.е. компьютеры в удалённом офисе смогут запросто обращаться к компьютерам центрального офиса так, как будто бы они стояли в соседнем кабинете. Но для этого, естественно, необходим стабильный и качественный канал интернета с наименьшим откликом. Поэтому использование модемного, мобильного или спутникового соединения здесь недопустимо.

Установка VPN происходит в два этапа: Установка сервера openVPN в центральном офисе и установка клиента openVPN в удалённом офисе. В дальнейшем, вы сможете установить ещё openVPN клиентов, если в вашей компании откроются дополнительные офисы и потребуется их соединить.

Установка openVPN сервера.
В моём случае, уже имеется настроенный шлюз интернета под Ubuntu в центральном офисе (на картинке server) и поэтому мне лишь необходимо доустановить пакет openVPN сервера.

sudo apt-get install openvpn
Для начала нам необходимо создать сертификаты безопасности и ключи для клиента. Это просто необходимо, чтобы никто посторонний не смог подключиться к нашему VPN каналу. Скрипты генерации ключей находятся в директории /usr/share/doc/openvpn/examples/easy-rsa/2.0. Переходим в неё:

cd /usr/share/doc/openvpn/examples/easy-rsa/2.0
Генерируем сертификаты попутно заполняя понятной информацией о фирме, электронном адресе и т.д.

        ./build-dh
./pkitool --initca
./pkitool --server server
./pkitool client

Созданные сертификаты и ключи должны появиться в той же папке. Перейдём к настройке openVPN сервера. Для этого создадим пустой файл настроек и начнём вносить в него необходимые записи:
sudo touch /etc/openvpn/server.conf
sudo nano /etc/openvpn/server.conf

        dev tun
        tls-server
        proto udp
        port 3334
        comp-lzo
        persist-tun
        persist-key
        
        # наши шлюзы будут общаться через виртуальные интерфейсы (на картинке между ними труба нарисована :) Здесь мы задаём их адреса
        ifconfig 192.168.254.1 192.168.254.2
        # маршрут к локальной сети удалённого офиса
        route 169.254.1.0 255.255.255.0

        dh /etc/openvpn/keys/dh1024.pem #Ключи безопасности. Переместите их из папки в которой создали в папку которую здесь укажете.  
        ca /etc/openvpn/keys/ca.crt
        cert /etc/openvpn/keys/server.crt
        key /etc/openvpn/keys/server.key

        log /var/log/openvpn.log #ведём логи 3 уровня
        verb 3

Вроде всё, сохраняем, выходим. А нет! Не всё. Здесь нам снова потребуется добавить правила в штатный файрвол, чтобы он правильно перенаправлял запросы из одной сети в другую:

sudo iptables -A INPUT -p udp -dport 3334 -j ACCEPT
sudo iptables -A INPUT -i tun0 -j ACCEPT
sudo iptables -A FORWARD -i tun0 -j ACCEPT
sudo iptables -A FORWARD -o tun0 -j ACCEPT

Теперь всё. Можно перезапустить сервер openVPN.
sudo /etc/init.d/openvpn restart
Установка клиента
С сервером покончили, перейдём к настройке клиента (на картинке client1). Здесь нам снова потребуется установить пакет openVPN. После установки, также создаём пустой файл настроек и внесём в него необходимые записи:

       dev tun
        tls-client
        proto udp
        remote 77.227.220.1 #внешний адрес шлюза в центральном офисе
        port 3334
        comp-lzo
        persist-tun
        persist-key
        
        # прописываем виртуальные интерфейсы в обратном порядке
        ifconfig 192.168.254.2 192.168.254.1
        # а здесь маршрут к локальной сети центрального офиса
        route 169.254.0.0 255.255.255.0

        dh /etc/openvpn/keys/dh1024.pem #Этот ключ одинаков с серверным
        ca /etc/openvpn/keys/ca.crt #Этот тоже
        cert /etc/openvpn/keys/client.crt #Эти ключи для клиента берём на сервере. У меня был [color=blue]установлен ftp[/color] поэтому труда не составило.
        key /etc/openvpn/keys/client.key #Этот тоже

        log /var/log/openvpn.log #и вновь ведём логи 3 уровня
        verb 3

Сохраняем, выходим, перезапускаем:

sudo /etc/init.d/openvpn restart
Прежде чем закончить, пропишем правила для iptables:

iptables -A INPUT -i tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -j ACCEPT
iptables -A FORWARD -o tun0 -j ACCEPT

В принципе всё. Теперь можно попробовать пропинговать адреса с пользовательских компьютеров в обе стороны. По картинке, пользователь 1.4 успешно соединился как с сервером 1С 0.102, так и с файлсервером 0.100, что и требовалось.


источники информации: http://www.opennet.ru/base/net/openvpn_office.txt.html
http://kuscsik.blogspot.com/2008/01/transparent-proxy-with-squid-3-on.html
« Последнее редактирование: 09 Март 2010, 20:38:59 от ck80 »

Оффлайн kolyan_k

  • Участник
  • *
  • Сообщений: 147
    • Просмотр профиля
Здравствуйте ! очень хороший манул только есть несколько вопросов после добавления
dev tun
        tls-server
        proto udp
        port 3334
        comp-lzo
        persist-tun
        persist-key
       
        # наши шлюзы будут общаться через виртуальные интерфейсы (на картинке между ними труба нарисована :) Здесь мы задаём их адреса
        ifconfig 192.168.254.1 192.168.254.2
        # маршрут к локальной сети удалённого офиса
        route 169.254.1.0 255.255.255.0

        dh /etc/openvpn/keys/dh1024.pem #Ключи безопасности. Переместите их из папки в которой создали в папку которую здесь укажете. 
        ca /etc/openvpn/keys/ca.crt
        cert /etc/openvpn/keys/server.crt
        key /etc/openvpn/keys/server.key

        log /var/log/openvpn.log #ведём логи 3 уровня
        verb 3
призапуске  openvpn  выдает fail .....
куда копать???

Оффлайн Mam(O)n

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля

Оффлайн kolyan_k

  • Участник
  • *
  • Сообщений: 147
    • Просмотр профиля
День добрый !!
что неправильно   сделал на клиенте что выдает такую ошибку
 Fatal TLS error (check_tls_errors_co) , restarting
и при выводе ifconfig  tap0  пишет что устройство не обноруженно... ??

Оффлайн Mam(O)n

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Ключики неправильные.

Оффлайн kolyan_k

  • Участник
  • *
  • Сообщений: 147
    • Просмотр профиля
Ключики неправильные.

неправильные где?? на клиенте или на сервере??
я полностью скопировал с сервера

Оффлайн vadkuvaev

  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля

Цитировать
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
здесь понятно, что бы в браузере не устанавливать адрес прокси
Цитировать
iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.0.1:3128
А за чем это правило? Вроде eth1 inet-интерфейс! Вы уверены, что ответ от веб сервера того же Яндекс, приходящий на eth1 придёт именно на 80 порт?

Оффлайн Mam(O)n

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
я полностью скопировал с сервера
Неправильно. Нужно генерировать клиентский набор.

Пользователь решил продолжить мысль 09 Март 2010, 10:05:29:
Цитировать
iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.0.1:3128
А за чем это правило? Вроде eth1 inet-интерфейс! Вы уверены, что ответ от веб сервера того же Яндекс, приходящий на eth1 придёт именно на 80 порт?
Поддерживаю, лишнее. Только не в этом ключе. А если бы еще и настройки сквида немного другие были, то вообще крутая дырка бы была в безопасности.
« Последнее редактирование: 09 Март 2010, 10:05:29 от Mam(O)n »

Оффлайн vadkuvaev

  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Цитировать
   
        dev tun
        tls-client
        proto udp
        remote 77.227.220.1 #внешний адрес шлюза в центральном офисе
        port 3334
        comp-lzo
        persist-tun
        persist-key
       
        # прописываем виртуальные интерфейсы в обратном порядке
        ifconfig 192.168.254.2 192.168.254.1
        # а здесь маршрут к локальной сети центрального офиса
        route 169.254.0.0 255.255.255.0

        dh /etc/openvpn/keys/dh1024.pem #Ключи безопасности берём на сервере. У меня был установлен ftp поэтому труда не составило.
        ca /etc/openvpn/keys/ca.crt
        cert /etc/openvpn/keys/server.crt
        key /etc/openvpn/keys/server.key

        log /var/log/openvpn.log #и вновь ведём логи 3 уровня
        verb 3
действительно косяк клиентский набор нужно генерировать отдельно, общий у сервера и клиента только dh1024.pem и ca.crt

Оффлайн ck80

  • Автор темы
  • Любитель
  • *
  • Сообщений: 76
    • Просмотр профиля
Цитировать
   
        действительно косяк клиентский набор нужно генерировать отдельно, общий у сервера и клиента только dh1024.pem и ca.crt

Я имел ввиду, что ключи для клиента берём на сервере. То есть ключи уже сгенерированные для клиента. Сейчас исправлю.

Оффлайн Mam(O)n

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Да, и еще не хороший пример сети 169.254.0.0/24 я думаю тоже стоит поправить. Допустим на что-нибудь из 192.168.0.0/16. Сеть 169.254.0.0/16 по стандарту является немаршрутизируемой и с этим могут возникнуть только проблемы.

Пользователь решил продолжить мысль 09 Март 2010, 16:49:49:
И еще выше про iptables писали.

Пользователь решил продолжить мысль 09 Март 2010, 18:53:26:
И еще, все пляски с разрешением трафика бесполезны без установления политики по-умолчанию в DROP для цепочек INPUT и FORWARD. И соответственно нужно включать транзит в /etc/sysctl.conf: net.ipv4.ip_forward=1

Пользователь решил продолжить мысль 09 Март 2010, 20:57:14:
sudo iptables -A FORWARD -i tun0 -j ACCEPT
sudo iptables -A FORWARD -o tun0 -j ACCEPT

Такая связка разрешит с любого интерфейса выходить в tun0 и обратно. Даже и с интернет-интерфейса. Я считаю это не безопасным.
« Последнее редактирование: 09 Март 2010, 20:57:14 от Mam(O)n »

Оффлайн kolyan_k

  • Участник
  • *
  • Сообщений: 147
    • Просмотр профиля
Здравствуйте!  неподскажите пожайлуста с чем связана такая ошибка  TLS Error: unroutable control packet received from

Оффлайн ck80

  • Автор темы
  • Любитель
  • *
  • Сообщений: 76
    • Просмотр профиля
Здравствуйте!  неподскажите пожайлуста с чем связана такая ошибка  TLS Error: unroutable control packet received from

Советуют:
 - проверить время на обоих системах
 - пегенерировать сертификаты
 - проверьте ваши сетевые подключения
 - права на файлы

Оффлайн kolyan_k

  • Участник
  • *
  • Сообщений: 147
    • Просмотр профиля
День добрый !
Уважаемые  помогите  не понимаю  как доделать  этот VPN  .....
проверил время ,  выдает такую ошибку только на клиенте: 
 TLS : Initial  packet from  192.168.1.1:1194   VERIFY OK: depth=1 , (далее сертификат)
VERIFY OK: depth=0 (далее сертификат)
Connection reset, restarting [-1]
TCP/UDP: CLOSING socket
SIGUSR1[soft, connection-reset] received , process restarting

Делал сертификаты на сервере и потом копировал файлы office-1.* и ca.crt
source ./vars
./clean-all
./build-ca
./build-dh

# Ключ для центрального офиса
./build-key-server office-0

# Ключ для первого офиса
./build-key office-1
делал и на самом клиенты полностью все генерил...
копировал и только файлы ca.crt    dh1024.pem
не вкакую не пускаеться объясните как правильно  сделать сертификаты ???

на сервере при соединеии клиента  выдает  такое
TLS error:  depth=0,  error=unsupported certificate purpose
TLS error: routines:SSL3_GET_CLIENT_CERTIFICATE:no certificate returned
                           
« Последнее редактирование: 19 Апрель 2010, 14:56:55 от kolyan_k »

Оффлайн arayakao

  • Любитель
  • *
  • Сообщений: 70
    • Просмотр профиля
    • Пошаговые настройки сервера на Linux и FreeBSD
А клиенты из центрального офиса могут подключиться к филиалу по этой схеме ?

 

Страница сгенерирована за 0.1 секунд. Запросов: 24.