Два шлюза и VPN

Данная статья не является руководством к действиям, это всего лишь один из вариантов решения, без углубленного описания, затронуты лишь те моменты, которые заставили задуматься. 

Итак предыстория.
 
Три года назад устроился работать в один Российский филиал зарубежной компании, формулировка при приеме была такая - "Мы думаем что наш уровень 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-сервер был бы настроен на отдельном хосте, то пришлось бы добавлять отдельные маршруты для него, вариантов добавления масса, от прописывания на каждом компе, до скриптов и групповых политик.
 
 
Интересное на сайте: 
0
Голосов пока нет