Ставим OpenVPN для удаленного доступа в домашнею сеть через домашний сервер — это просто. А вот как находить дом если IP динамический это уже сложно(легко уже решено тут)!
В OpenVPN, как выяснялось, самое сложное это настроить маршрутизацию — легко запутаться, и я запутался конечно! Есть варианты подключаться через интерфейсы tap и tun. С tap у меня не сложилось, да и не нужен он. tap это виртуальная сетевая карта которая прям вот помешает нас в нашу сеть как еще одного пользователя внутренней сети, а tun просто заруливает запросы на внутренние IP в VPN а интернет и прочии остаются согласно настройками местного подключения (и кстати tap на нерутованных andorid девайсах не работает).
Вот эта схемка должнапомочь, понять принцип и предназначение
Устанавливаем OpenVPN
cd /usr/ports/security/openvpn
тут главное чтобы без EASYRSA и DOC
make
make install
создаем папку
mkdir /usr/local/etc/openvpn
mkdir /usr/local/etc/openvpn/ccd
mkdir /var/log/openvpn
mkdir /usr/local/etc/openvpn/certs
mkdir /usr/local/etc/openvpn/crl
mkdir /usr/local/etc/openvpn/private
mkdir /usr/local/etc/openvpn/req
mkdir /usr/local/etc/openvpn/keys
touch /usr/local/etc/openvpn/index.txt
echo "01" > /usr/local/etc/openvpn/serial
добавляем
vi rc.conf
строки
openvpn_enable="YES" openvpn_if="tun" openvpn_configfile="/usr/local/etc/openvpn/openvpn.conf" openvpn_dir="/usr/local/etc/openvpn"
Далее генерим по инструкции www.sergeysl.ru/freebsd-openvpn-x509
делаем файл
vi /usr/local/etc/openvpn/openssl.cnf
и вставляем
[ ca ] default_ca = CA_default [ CA_default ] dir = /usr/local/etc/openvpn crl_dir = $dir/crl database = $dir/index.txt new_certs_dir = $dir/certs certificate = $dir/CA_cert.pem serial = $dir/serial crl = $dir/crl/crl.pem private_key = $dir/private/CA_key.pem RANDFILE = $dir/private/.rand default_days = 3650 default_crl_days = 365 default_md = md5 unique_subject = yes policy = policy_any x509_extensions = user_extensions [ policy_any ] organizationName = match organizationalUnitName = optional commonName = supplied [ req ] default_bits = 2048 default_keyfile = privkey.pem distinguished_name = req_distinguished_name x509_extensions = CA_extensions [ req_distinguished_name ] organizationName = Organization Name (must match CA) organizationName_default = Company organizationalUnitName = Location Name commonName = Common User or Org Name commonName_max = 64 [ user_extensions ] basicConstraints = CA:FALSE [ CA_extensions ] basicConstraints = CA:TRUE default_days = 3650 [ server ] basicConstraints = CA:FALSE nsCertType = server
Генерим дальше, пока не понимая чо к чему (сидя в папке /usr/local/etc/openvpn )
cd /usr/local/etc/openvpn
Тут на все можно отвечать энтер кроме вопрос
Common Name
пишим сюда свой вывод команты
hostname -f
поехали
openssl req -new -nodes -x509 -keyout private/CA_key.pem -out CA_cert.pem -days 3650
openssl req -new -nodes -keyout keys/server.pem -out req/server.pem
openssl ca -batch -config openssl.cnf -extensions server -out certs/server.pem -infiles req/server.pem
openssl dhparam -out dh2048.pem 2048
openvpn --genkey --secret ta.key
chmod 600 /usr/local/etc/openvpn/keys/server.pem
Это было нужно для сервера
Для клиентов. Для каждого пользователя VPN выбираем имя в примере это Client01 на вопрос Common Name надо тоже отвечать Client01. Первые буквы ключей оставляем как есть K R C это нужно.
openssl req -new -nodes -keyout keys/KClient01.pem -out req/RClient01.pem
openssl ca -batch -config openssl.cnf -out certs/CClient01.pem -infiles req/RClient01.pem
Создаем список отзыва сертификатов — будет нужен для отзыва сертификатов
openssl ca -config openssl.cnf -gencrl -out crl/crl.pem
для просмотра отозванных сертивицатов надо
openssl crl -noout -text -in crl/crl.pem
чтобы отозвать сертификат пользователя Client01
openssl ca -config openssl.cnf -revoke certs/CClient01.pem
OepnVPN конечно странноватый, кофиг файл даже не кидает полсе установки.. читаем придумываем
vi /usr/local/etc/openvpn/openvpn.conf
Вставляем такой текст
mode server dev tun0 local 192.168.1.200 port 1194 proto udp topology subnet ifconfig 192.168.3.1 255.255.255.0 ifconfig-pool 192.168.3.4 192.168.3.13 ifconfig-pool-persist ipp.txt client-config-dir ccd client-to-client tls-server dh /usr/local/etc/openvpn/dh2048.pem ca /usr/local/etc/openvpn/CA_cert.pem cert /usr/local/etc/openvpn/certs/server.pem key /usr/local/etc/openvpn/keys/server.pem crl-verify /usr/local/etc/openvpn/crl/crl.pem tls-auth /usr/local/etc/openvpn/ta.key 0 comp-lzo keepalive 10 120 tun-mtu 1500 mssfix 1450 persist-key persist-tun user nobody group nobody log /var/log/openvpn/openvpn.log log-append /var/log/openvpn/openvpn.log verb 3
local — внешний адрес домашнего сервера
ifconfig 192.168.3.1 255.255.255.0 — тут у нас и выбор подсети 192.168.3.0 и IP сервера-шлюза-openvpn для клиетов
ifconfig-pool 192.168.3.4 192.168.3.13 — клиенты должны получать айпи от сюда от 4 до 13
Чтобы не запутаться с маршрутизацией
Еще раз, у меня на сервере два интерфейса, две подсети
192.168.1.0
192.168.2.0
Клиенты OpenVPN живут в 192.168.3.0 им надо через файл /usr/local/etc/openvpn/ccd/ пропушит (кстати чисто формально) маршруты в первые две подсети, в третью они и так могут ходить.
Но пушать то мы пропушаем, но не берет маршруты Windows, поэтому мы в настройках клиента тоже прописываем маршрут, но уже конкретно со шлюзуем 192.168.3.1 и OpenVPN на винде должен запускать под администратором.
Появление третей подсети на домашнем сервере, тоже требует настройки на firewallе, надо учесть и разрешить еще и хождение подсети 192.168.3.0
Кстати у меня файрволл ipfw, и порты наружу закрыты так что мне нужно открыть порт 1194
vi /etc/rc.firewall
строчку чтобы давал нам
${FwCMD} add allow udp from any to any 1194 via ${lanout}
так же разрешил всему ходить по tun0
${FwCMD} add allow all from any to any via tun0
и надо открыть наружу кучу UDP портов (по Asteriskуже были открыты но тут надо прям по всему диапазону для TLS)
${FwCMD} add allow udp from any to any 1195-65000 via ${lanout}
и перезагрузить оный
/etc/rc.d/ipfw restart
проверяем запустился ли
service openvpn start
смотрим как запустился
sockstat -4 -l | grep openvpn
Все работает… у меня через пару недель, а у прочтенцов этой инструкции может и сразу заработать (хотя сразу не бывает такого)!
Теперь надо создать файл для каждого пользователя должен называться так же как переж этим Client01 и так далее
vi /usr/local/etc/openvpn/ccd/Client01
и вставляем
push "route 192.168.1.0 255.255.255.0" push "route 192.168.2.0 255.255.255.0"
Кстати не кстати opnessl по умочанию не создают имена ключей сертификатов если такие уже были
чтобы разрешить их все таки делать надо в файле
vi /usr/local/etc/openvpn/index.txt.attr
изменить строку наunique_subject = no
для настройки на клиенте нам нужны следующие файлы, их надо унести к клиенту
/usr/local/etc/openvpn/certs/CClient01.pem
/usr/local/etc/openvpn/CA_cert.pem
/usr/local/etc/openvpn/keys/KClient01.pem
/usr/local/etc/openvpn/ta.key
Делаем файл с именем клиента
vi Client01.ovpn
и вставляем туда текст
client auth-nocache dev tun pull topology subnet proto udp comp-lzo resolv-retry infinite persist-key persist-tun remote 83.237.0.217 route 192.168.2.0 255.255.255.0 192.168.3.1 route 192.168.1.0 255.255.255.0 192.168.3.1 ca CA_cert.pem cert CClient01.pem key KClient01.pem tls-client tls-auth ta.key 1 verb 3 float
Все это несем на Windows компутер. Качаем от сюда и ставим для 32 битной Windows openvpn-install-2.3.8-I601-i686.exe openvpn.net/index.php/open-source/downloads.html
И все взятое с сервера кладем в папку
C:\Program Files\OpenVPN\config\
Прежде чем попробовать!
1. На Windows программу OpenVPN надо запускать с права админстраторами (потому что она маршруты прописвает и видимо еще что-то)
Для этого на ярлыке программы ставим Выполнять эту программу от имени администратора
2. Нам нужно знать внешний IP нашего интернет роутера-модема и пр. Для этого по этой статье(например) делаем отсылку внешнего IP с сервера www.itcooky.com/?p=3802. IP вводим через меню OpenVPN там выбираем Редактировать конфигурацию
3. В домашней сети мы сидим за модемом-роутером, не смотрим в сеть с прямого айпи, не можем мы прямо ответить на запрос!
Поэтому на своем устройстве для интернета надо сделать проброс портов а именно пота 1194 на сервер на котором сидит и слушает OpenVPN!
У меня один из ADSL модемов Dlink, нужные настройки в нем прячутся(до сих пор не могу понять почему в этом месте) Межсетевой экран > Виртуальные серверы
Настраиваем как на картинке
Пробуем!
Из смартфона на iOS или Android делаем Wi-Fi точку доступа, подключаем к ней ноутбук с OpenVPN, прописываем актуальный IP домашнего модем-роутра! И работает!!!
UPD: Подключаемся к домашней сети с телефона на Android
Как выяснилось приложение от разработчиков OpenVPN тут вообще не поможет! Но на помощь приходит Арне Швабе, устанавливаем OpenVPN for Android play.google.com/store/apps/details?id=de.blinkt.openvpn
Подключаем телефофн у ПК и копируем на его память, все тоже что и сверху копировлаи для ПК клиента без измения в одну папку.
Запускаем на телефоне OpenVPN for Android
— жмем с права вверху плюс
— Импорт
— находим нашу папку в ней нажимаем на имя конфига Client01.ovpnи жмем Выбрать
В списке появляется наше соединение
Однако, если внешний IP домашнего модема уже сменился, его надо попроавить в настройках соединения во вкладке Server List
Добавить комментарий