Настройка VPN-соединения в Linux

24/11/2008 16:41:00

Использование GPRS/EDGE-Интернета там, где нет проводной связи безусловно определенный выход. Однако для системы "Умный Дом" неплохо было бы иметь доступ к домашнему серверу извне. Дело в том, что в случае GPRS-соединения реальный IP-адрес оператором связи не предоставляется, а значит "зайти" в виртуальным дом нельзя. В связи с этим я был счастлив, когда в моих курмышах появилась техническая возможность на установку проводного Интернета по технологии ADSL. В качестве модема был использован валявшийся без дела, поседевший от времени Thomson SpeedTouch 530.

К сожалению, провайдер отказался выдать статический IP-адрес. Но меня это не пугало, главное, что IP-адрес был реальным, хоть и выделялся динамически из определенной сети. Мне были вручены параметры VPN-соединения и вполне ожидаемые "наставления" относительно настроек этой штуки в Linux. Мы, люди, так или иначе использующие что-то, отличное от Microsoft Windows, относимся к таким наставлениям философски, отвечая что-нибудь нейтральное вроде "cам дурак". А все-таки приятно иногда общаться со службой поддержки, особенно когда на той стороне сидит какая-нибудь мадам средне-неопределенного возраста, дающая неизменную и удивительно полезную рекомендацию "перезагрузите компьютер".

Для того, чтобы Linux (например, Debian, как у меня) умел работать через VPN, нам необходимы следующие пакеты:

Предположим, вы уже получили через DHCP адрес сетевого интерфейса. Физически линк есть.

Нужно создать файл с любым именем в каталоге /etc/ppp/peers. Например /etc/ppp/peers/vpn и написать туда что-нибудь вроде:

где XXX.XXX.XXX.XXX - IP адрес вашего VPN-сервера.

Если планируется использовать Linux в качестве сервера/маршрутизатора в локальной сети, то велика вероятность того, что некоторые сайты на клиентских компьютерах (особенно под управлением Windows) не будут загружаться. Не вдаваясь в подробности этой проблемы могу порекомендовать уменьшить размер MTU соединения до 1400-1420 следующим образом.

Теперь нужно отредактировать файл /etc/ppp/chap-secrets

Собственно, все, теперь запускаем команду

pppd start vpn

и видим по команде ifconfig появление нового интерфейса ppp0

Важно! Если IP-адрес VPN-сервера находится в сети отличной от той, что получена через DHCP модемом, то прежде чем запускать VPN необходимо прописать маршрут к этому хосту через существующий Ethernet-интерфейс. Делается это командой route

Но правильнее прописать эту команду в файл /etc/network/interfaces где описан сам интерфейс.

Еще хочу заметить, что в моем случае после поднятия VPN-соединения Интернет появляется с задержкой примерно в 30 секунд. Поэтому если сразу пинги не идут - подождите.

Важно при этом, чтобы в файле /etc/resolv.conf был прописан работающий DNS-сервер. В файле /etc/ppp/peers/vpn можно прописать опцию usepeerdns, чтобы pppd брал правильный адрес DNS-сервера. Однако зачастую VPN-сервер выдает неправильный адрес DNS-сервера или же выдает правильный, но он перезаписывается неправильным адресом, выданным уже в процессе работы VPN-соединения DHCP-сервером. В таких случаях помогает пакет resolvconf, с помощью которого можно управлять записями о DNS серверах, указывать приоритеты DNS-серверов.

Чтобы

VPN-соединение "поднималось" при загрузке системы, нужно включить его описание в файл /etc/network/interfaces

Чтобы через VPN-соединение пустить всех пользователей из локальной домашней сети, нужно настроить NAT или MASQUERADE с помощью пакета iptables.

Правила для iptables можно разместить в любом удобном месте. Например создать файл с любым именем в каталоге /etc/network/if-up.d/ прописав в него следующее:

Теперь, если мы выполним эту команду, мы будем иметь возможность ходить в Интернет из локальной сети. Не забудьте только включить IP-forwarding в системе и файле /etc/sysctl.conf (как написано в статье про настройку GPRS )

Чтобы Network Address Translation (NAT) работал более четко и стабильно (в случае использования Linux в качестве маршрутизатора), мне потребовалось также добавить в вышеуказанный файл строчку:

Может, кому-нибудь поможет. Вроде бы все. Хотя нет, есть один момент. Как же нам теперь зайти на наш сервер, если мы не знаем его адреса? Я решил вопрос таким образом. Купил самый дешевый аккаунт на коммерческом хостинге. Создал в нем каталог home. а в корне положил PHP-скрипт такого характера

Другими словами, я создаю файл .htaccess для Web-сервера Apache, в котором идет переадресация на мой домашний сервер.

my_account/my_script.php?ip=XXX.XXX.XXX.XXX, а также прописал выполнение этого скрипта в cron каждые 30 минут.

my_account/home

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

Тем, кто хочет использовать Linux не в качестве VPN-клиента, а в качестве VPN-сервера, скажу, что делается это еще проще.

Необходим пакет pptpd

Редактируем по своему усмотрению файл /etc/pptpd.conf и chap-secrets (как указано выше). Затем просто запускаем pptpd вручную и если работает, пишем простенький скрипт и кладем его в /etc/init.d

Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.

Добавить комментарий:

Сортировка комментариев: Последние сверху | Первые сверху

2013-01-11 05:51:34 | N

2012-12-17 00:49:29 | oleg

странно читать первый абзац, что если GPRS, то не получится подключиться без реального IP.

у меня получается - через хостинг с VPN, правда я использую openvpn все вполне нормально работает.

2011-03-01 12:47:53 | Andrey_B

tpm3, Вы совершенно правы. Но и в статье уже было написано об этом "В сети существуют также различные, так называемые, динамические DNS-службы."

Можно, в принципе, обойтись без покупки хостинга, а воспользоваться услугами, к примеру DynDNS.org, что позволит обновлять соответствие доменного имени нашего сервера айпи адресу по запросу клиента, который часто бывает встроен в популярные модели роутеров, ну и под линукс доступен.

Источник: www.ab-log.ru

Категория: Программное обеспечение

Похожие статьи: