Создание VPN сервера на FreeBSD для IOS, Android и Windows клиентов

Добрый день!
Небольшое вступление. На работе директор ездил в Китай и на себе попробовал китайский файрвол. Twitter в Китае блочится напрочь. В связи с этой поездкой было принято решение создать VPN решение для обхода блокировщиков.
Коммерческие варианты отбросили в сторону, т.к. постоянная потребность в  VPN не стоит, так же отбросили прекрасное решение, как OpenVPN, смотря в сторону нативных клиентов, в первую очередь на iOS, будем делать PPTP сервер.
Итак, поехали:)Все будем делать на FreeBSD 9.2, без пересборке ядра, нужные нам модули загрузим с помощью kldload.
Для примера, наш сервер будет иметь реальный IP-адрес XXX.XXX.XXX.XXX на интерфейсе xl0, для VPN клиентов выделим любую фейковую сеть из неиспользуемых в нашей локальной сети (т.к. в моей задаче не стоит, пускать VPN клиентов во внутрь сети) для примера возьмем сеть 192.168.55.0/24.

Обновляем порты

Устанавливаем mpd5

В config оставляем все по-умолчанию
mpd52

Разрешаем запуск mpd5

Создаем конфигурационные файлы mpd5 и устанавливаем им атрибуты

Редактируем конфиг

 

Прописываем наших клиентов в файле /usr/local/etc/mpd5/mpd.secret

IP-адрес прописывать необязательно!
Настраиваем логирование mpd5.
Вписываем /etc/syslog.conf следующее

Настраиваем ротацию лога /var/log/mpd.log.

Добавляем в него эту строку

Создадим лог-файл

Ресстартуем syslogd newsyslogd

Стартуем mpd5

Смотрим вывод в лог

Если все правильно, то вывод должен выглядеть примерно так:

На этом этапе можете попробовать подключится к серверу с указанными логин-паролями в файле /usr/local/etc/mpd5/mpd.secret, если все хорошо, то приступим к NAT.
Я использую ipnat.
Делаем из нашего сервера шлюз:)

Создаем файл /etc/ipnat.conf со следующим содержанием (в начале статьи мы договорились, что внешний интерфейс у нас будет xl0, соответственно Вы должны вписать имя вашего интерфейса)

Теперь либо перезагружаете ваш сервер, либо подгружаем модуль ядра, загружаем NAT и делаем из сервера шлюз (если до этой загрузки в rc.conf не было указано gateway_enable=»YES»)

Загружаем наши правила NAT

Можем проверить состояние NAT, командой ipnat -l

Не забываем прописать разрешающие правила в FireWall, пример для ipfw

На этом вроде все, буду рад — если кому-нибудь эта статья пригодится, опробованные клиенты: Android 2.3.5, iOS 6, Windows 7

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *