Два шлюза и VPN
Опубликовано сб, 10/01/2011 - 21:08 пользователем alitius
Данная статья не является руководством к действиям, это всего лишь один из вариантов решения, без углубленного описания, затронуты лишь те моменты, которые заставили задуматься.
Итак предыстория.
Три года назад устроился работать в один Российский филиал зарубежной компании, формулировка при приеме была такая - "Мы думаем что наш уровень IT очень низкий, имеющиеся сисадмины ситуацию исправить не могут". Ладно думаю хорошо, поднимать контору не в первой, согласился.
Ознакомившись с ситуацией, я понял, что поднимать надо все с нуля, а имеющихся айтишнегов гнать в шею. Сеть состояла из нескольких рабочих групп удаленных друг от друга и не имеющих между собой никакой связи, а на дворе то уже был 2008 год как-никак. Таким образом по-тихоньку из рабочих групп перешли на домен, появились политики безопасности и прочие вкусности. Но речь здесь пойдет не об этом.
Весь обмен информации происходил через Российский головной офис (куда я и устроился) посредством VPN c главным офисом зарубежом вот по такой вот схеме:
То бишь на выходе из офиса стояла Cisco, на который был настроен VPN до головного зарубежного офиса (VPN разруливался на стороне провайдера), а все сервисы (Интернет, Почта, Корпоративные сервисы) шли через это VPN канал на сервера зарубежного офиса. Ширина канала была равна 1 Мб/c и это почти на 50 человек. Интернет шел через прозрачную проксю зарубежного офиса. На циске все порты закрыты и доступа к ней никто не дает, рулят ей зарубежные коллеги. У особо нужных людей даже были ВПН-клиенты, которые цеплялись на зарубежные сервера (никакого доступа во внутренню сеть) и стоили по 10$ в месяц каждый.
Таким образом нарисовались несколько задач:
1. Организовать отдельный доступ в интернет с возможность контроля трафика
2. Организовать VPN-соединения с удаленными офисами и клиентами, с возможностью работать с корпоративными сервисами находящимися на зарубежных серверах.
Вот что-то такое -
Бюджет как Вы понимаете был выделен нулевой, ну практически нулевой, хорошо хоть денег выделили на подведение своего провайдера =)
Для интернет шлюза (он же ВПН сервер) головного офиса была взята машина PIII-800/512/40, на которую был залит FreeBSD и установлена связка SQUID+SAMS c авторизацией NTLM (если у кого-то есть вопросы как ставить, то прошу обратиться к Лиссяре, у него очень подробно все расписано), в качестве фаервола - PF.
Т.к. пользователям был прописан новый шлюз, то был создан pac-скрипт, который разделял http трафик на корпоративный (который шел через циску ) и интенрнет, через наш новый шлюз.
Примерный pac-скрипт.
/* Last update 2008-08-29 */
function FindProxyForURL(url, host)
{
/* Approved IP for direct access exceptions */
if
(dnsDomainIs(host, "127.0.0.1") ||
dnsDomainIs(host, "localhost") ||
dnsDomainIs(host, "10.203.29.6") ||
dnsDomainIs(host, "10.204.4.113") ||
dnsDomainIs(host, "10.204.4.121") ||
dnsDomainIs(host, "10.204.4.122") ||
dnsDomainIs(host, "10.204.4.123") ||
dnsDomainIs(host, "abc. domain.com")||
dnsDomainIs(host, "cde.domain.com"))
{
return "10.10.10.5:8080"; /* Зарубежный прокси*/
}
else if (isInNet(host, "192.168.1.0", "255.255.255.0") ||
isInNet(host, "192.168.2.0", "255.255.255.0") ||
isInNet(host, "192.168.3.0", "255.255.255.0")
{
return "DIRECT"; /*Российские внутренние http-ресурсы идут без прокси*/
}
else
{
return "PROXY 192.168.1.1:3128"; /* Все что идет в интернет, пропускаем через наш прокси*/
}
}
Который мы добавляем в групповые политики, это помогло нам с IE, для фаерфокса пришлось писать скрипт, который также вставляем на "Вход в систему" в групповые политики:
@echo off
cd %USERPROFILE%\Applicat*\Mozilla\Firefox\Profiles\*.default\
echo user_pref("network.proxy.autoconfig_url", "http://192.168.1.1/proxy.pac"); >> prefs.js
echo user_pref("network.proxy.no_proxies_on", ""); >> prefs.js
echo user_pref("network.proxy.type", 2); >> prefs.js
Для разделения остального трафика прописываем маршруты на нашем новом шлюзе:
для проверки можно добавить маршрут через
route add 10.204.4.0/24 192.168.1.2
где 192.168.1.2. циска с впном до зарубежных коллег
Такой маршрут будет существовать до первой перезагрузки, для добавления статического маршрута добавим в rc.conf
static_routes="net1 net2"
route_net1="-net 10.204.4.0/24 192.168.1.2"
route_net2="-net 10.205.5.0/24 192.168.1.2"
Все айпи адреса и маршруты приведены для примера.
С интернетом разобрались, теперь перейдем к впн, как самый простой вариант я выбрал OpenVPN. Его настройку также расписывать не буду, все есть в интернете.
На удаленные филиалы ставяться слабенькие машины с BSD, squid+sams, клиент openvpn, настраиваем сайт нашего домена. Т.к. по умолчанию у всех уже прописан наш новй шлюз, то репликация идет, все внутри российского филиала друг друга видят, но вот выйти с удаленных филиалов в зарубежную не удается. Как решить?
Решаем очень просто, натим все входящие соединения от наших сетей на внутреннем интерфесе. Прописываем в конфиге pf всего одну строчку -
nat on $int_if from {10.10.100.0/24 192.168.2.0/24 192.168.3.0/24} to any - ($int_if)
Таким образом, мы построили довольно-таки функциональную сеть с минимальными затратами, которая живет по сей день.
PS. если vpn-сервер был бы настроен на отдельном хосте, то пришлось бы добавлять отдельные маршруты для него, вариантов добавления масса, от прописывания на каждом компе, до скриптов и групповых политик.
Интересное на сайте:
Голосов пока нет