Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
Сергей Супрунов
Недавно мне пришлось столкнуться с такой задачей: имеется локальная сеть с адресами 10.x.x.0/24.
Для работы с вышестоящим сервером корпоративной сети машины должны иметь адреса из этого диапазона, и пакеты в данном случае уходят непосредственно на Ethernet-порт коммутатора (точнее, заворачиваются туда правилами ipfw, работающего на сервере FreeBSD). Доступ в Интернет осуществляется с помощью трансляции адресов (NAT).
Однако для работы с некоторыми внешними серверами мне нужно было иметь реальный адрес, причем работа через NAT или proxy-сервер не поддерживалась. Ставить себе вторую сетевую карту и тащить отдельный сегмент до сервера, в который тоже пришлось бы устанавливать еще один (уже третий) сетевой адаптер, очень не хотелось. Вариант с назначением себе в каждый момент времени нужного адреса тоже не радовал (хоть Windows XP и не требует перезагрузки после изменения сетевых адресов, но все равно процедура не из приятных). Тогда было принято решение «пробросить» до сервера так называемую виртуальную частную сеть (VPN), о чем и пойдет речь в данной статье.
Прежде всего нужно было поднять на FreeBSD VPN-сервер. Почитав немного про такие средства, как poptop и mpd, свой выбор я остановил на последнем как более «родном» для FreeBSD. Mpd использует интерфейс netgraph, благодаря чему большинство операций выполняется на уровне ядра системы, тем самым повышая скорость работы. Как правило, специально включать поддержку netgraph в ядро не требуется – она подгружается и отлично работает в виде модулей, в чем можно убедиться с помощью команды kldstat (после того, как mpd будет установлен и запущен):
$ kldstat
Id Refs Address Size Name
1 14 0xc0400000 370850 kernel
2 1 0xc16f3000 4000 if_vlan.ko
3 1 0xc1741000 2000 snake_saver.ko
4 1 0xc17d4000 4000 ng_socket.ko
5 8 0xc17d8000 12000 netgraph.ko
6 1 0xc17ef000 4000 ng_iface.ko
7 1 0xc17f3000 8000 ng_ppp.ko
8 1 0xc17fb000 4000 ng_bpf.ko
9 1 0xc17ff000 5000 ng_vjc.ko
10 1 0xc1d43000 5000 ng_pptpgre.ko
11 1 0xc1d48000 5000 ng_ksocket.ko