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

Дано:
— Интернет шлюз на 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.htmlhttp://kuscsik.blogspot.com/2008/01/transparent-proxy-with-squid-3-on.html