В данной статье описывается один из методов организации доступа к локальным ресурсам удаленной сети посредством технологии VPN. Я знаю всего пару хороших VPN серверов, работающих под FreeBSD, которые позволяют решить широкий круг задач: MPD и OpenVPN. Каждый из них обладает своими достоинствами и недостатками, поэтому выбирать какой ставить, следует в зависимости от поставленной задачи. К примеру, с помощью MPD можно сделать VPN сервер, авторизующий клиентов только по паре логин/пароль, к которому можно подключиться стандартными средствами Windows. В тоже время для подключения к OpenVPN, клиенту будет необходим, как минимум, определенный сертификат, а так же одноименное клиентское приложение. Зато OpenVPN позволяет организовать соединение, которое работает на втором уровне сетевой модели OSI, что открывает доступ для широковещательного трафика. Именно поэтому был выбран сервер OpenVPN для решения следующей задачи: организация доступа пользователям к локальным ресурсам удаленной сети, с возможностью циркуляции по соединению широковещательного трафика.
Итак, идем в порты и устанавливаем OpenVPN. На момент написания статьи в портах доступен сервер версии 2.2.2. В окне параметров сборки я ничего не изменял.- # cd /usr/ports/security/openvpn
- # make install clean
- # mkdir /usr/local/etc/openvpn/easy-rsa
- # cp -R /usr/local/share/doc/openvpn/easy-rsa/2.0 /usr/local/etc/openvpn/easy-rsa
- # Если у вас паранойя, то увеличьте это значение до 2048 бит.
- # Это замедлит процесс согласования TLS и генерацию
- # ключа Диффи-Хеллмана.
- export KEY_SIZE=1024
- # Время жизни сертификатов.
- export CA_EXPIRE=9999
- export KEY_EXPIRE=9999
- # Эти значения используются при создании сертификатов.
- # Они всегда должны быть заданы.
- export KEY_COUNTRY="RU"
- export KEY_PROVINCE="Russia"
- export KEY_CITY="Yekaterinburg"
- export KEY_ORG="www.example.org"
- export KEY_EMAIL="nekit@info-x.org"
- export KEY_CN="vpn.example.org"
- export KEY_NAME="Nekit"
- ### Переключаемся в стандартную оболочку
- # sh
- ### Инициализируем переменные окружения
- # . ./vars
- # ./clean-all
- # ./build-ca
- Generating a 1024 bit RSA private key
- .................++++++
- ..............++++++
- writing new private key to 'ca.key'
- -----
- You are about to be asked to enter information that will be incorporated
- into your certificate request.
- What you are about to enter is what is called a Distinguished Name or a DN.
- There are quite a few fields but you can leave some blank
- For some fields there will be a default value,
- If you enter '.', the field will be left blank.
- -----
- Country Name (2 letter code) [RU]:
- State or Province Name (full name) [Russia]:
- Locality Name (eg, city) [Yekaterinburg]:
- Organization Name (eg, company) [www.example.org]:
- Organizational Unit Name (eg, section) [none]:
- Common Name (eg, your name or your server's hostname) [vpn.example.org]:
- Name [Nekit]:
- Email Address [nekit@info-x.org]:
- # openvpn --genkey --secret /usr/local/etc/openvpn/easy-rsa/keys/ta.key
- # ./build-key-server server
- Generating a 1024 bit RSA private key
- ............................................................................................++++++
- .....++++++
- writing new private key to 'server.key'
- -----
- You are about to be asked to enter information that will be incorporated
- into your certificate request.
- What you are about to enter is what is called a Distinguished Name or a DN.
- There are quite a few fields but you can leave some blank
- For some fields there will be a default value,
- If you enter '.', the field will be left blank.
- -----
- Country Name (2 letter code) [RU]:
- State or Province Name (full name) [Russia]:
- Locality Name (eg, city) [Yekaterinburg]:
- Organization Name (eg, company) [www.example.org]:
- Organizational Unit Name (eg, section) [none]:
- Common Name (eg, your name or your server's hostname) [server]:
- Name [Nekit]:
- Email Address [nekit@info-x.org]:
- Please enter the following 'extra' attributes
- to be sent with your certificate request
- A challenge password []:
- An optional company name []:
- Using configuration from /usr/local/etc/openvpn/test/openssl-0.9.8.cnf
- Check that the request matches the signature
- Signature ok
- The Subject's Distinguished Name is as follows
- countryName :PRINTABLE:'RU'
- stateOrProvinceName :PRINTABLE:'Russia'
- localityName :PRINTABLE:'Yekaterinburg'
- organizationName :PRINTABLE:'www.example.org'
- organizationalUnitName:PRINTABLE:'none'
- commonName :PRINTABLE:'server'
- name :PRINTABLE:'Nekit'
- emailAddress :IA5STRING:'nekit@info-x.org'
- Certificate is to be certified until Jan 13 16:39:10 2040 GMT (9999 days)
- Sign the certificate? [y/n]:y
- 1 out of 1 certificate requests certified, commit? [y/n]y
- Write out database with 1 new entries
- Data Base Updated
- # ./build-dh
- Generating DH parameters, 1024 bit long safe prime, generator 2
- This is going to take a long time
- ........+.............................................+........
- # На каком IP адресе сервер будет принимать соединения от клиентов.
- # Можно не задавать, тогда сервер будет принимать подключения на всех интерфейсах.
- ;local a.b.c.d
- # На какой порт принимать соединения?
- port 1194
- # TCP или UDP сервер?
- ;proto tcp
- proto udp
- # "dev tun" создаст маршрутизируемый IP туннель.
- # "dev tap" создаст Ethernet туннель.
- # Укажите здесь, например, "dev tap0", если вам нужно сделать мост.
- # Также вам нужно будет перед запуском сервера создать интерфейс
- # с таким же именем.
- dev tap0
- ;dev tun
- # Корневой сертификат SSL/TLS. Сервер и каждый клиент должны иметь
- # собственные сертификаты и ключи. Но корневой сертификат (только он)
- # один для всех.
- ca /usr/local/etc/openvpn/easy-rsa/keys/ca.crt
- cert /usr/local/etc/openvpn/easy-rsa/keys/server.crt
- key /usr/local/etc/openvpn/easy-rsa/keys/server.key
- # Ключ Диффи-Хеллмана.
- dh /usr/local/etc/openvpn/easy-rsa/keys/dh1024.pem
- # Данный параметр говорит OpenVPN работать в качестве сервера
- # и использовать указанную здесь подсеть. Первый из подсети адрес
- # сервер возьмет себе, остальные же будут выдаваться клиентам.
- # Закомментируйте данный параметр, если вам нужен режим моста.
- #server 10.8.0.0 255.255.255.0
- # В этом файле сервер сохраняет данные вида: клиент <-> IP адрес.
- # Если сервер аварийно завершится, то после возобновления работы
- # сервера, восстановивший соединение клиент получит тот же
- # IP адрес, который был до обрыва.
- #ifconfig-pool-persist ipp.txt
- # Включить режим сервера для моста. Только сначала вам необходимо
- # подготовить в ОС мост и добавить в него TAP интерфейс. Здесь
- # указывается 4 параметра: IP и маска моста, а также пул адресов,
- # адреса из которого будут выданы клиентам.
- #server-bridge 192.168.7.250 255.255.255.0 192.168.7.51 192.168.7.100
- # Смысл такой же, как и в предыдущем параметре, только выдачей
- # адресов клиентам будет заниматься DHCP сервер (должен быть настроен отдельно).
- server-bridge nogw
- # Маршруты, которые будут добавлены на клиентской машине
- # при подключении.
- ;push "route 192.168.10.0 255.255.255.0"
- ;push "route 192.168.20.0 255.255.255.0"
- # Если раскомментировать данный параметр, то для клиентов
- # эта машина будет шлюзом по умолчанию.
- ;push "redirect-gateway def1 bypass-dhcp"
- # Можно передать клиенту дополнительные параметры для сетевого
- # подключения, например адреса DNS или WINS серверов.
- # За дополнительной информацией идти по этой ссылке:
- # http://openvpn.net/faq.html#dhcpcaveats
- ;push "dhcp-option DNS 208.67.222.222"
- ;push "dhcp-option DNS 208.67.220.220"
- # Раскомменитруйте данный параметр, чтобы клиенты могла видеть
- # друг друга. По умолчанию клиенты могут отправлять запросы
- # только серверу.
- client-to-client
- # Раскомментируйте данный параметр, если вы хотите разрешить
- # подключение нескольких клиентов с одинаковым значением поля
- # Common Name в сертификате.
- duplicate-cn
- # Проверять каждые 10 секунд жив ли клиент. Если за 120 секунд он
- # не откликнется, то соединение будет разорвано.
- keepalive 10 120
- # Для дополнительной безопасности (block DoS attacks and
- # UDP port flooding) сгенерируйте ключ командой
- # openvpn --genkey --secret ta.key
- # и укажите путь к нему здесь. Второй параметр должен быть
- # '0' для сервера и '1' для клиента.
- tls-auth /usr/local/etc/openvpn/easy-rsa/keys/ta.key 0 # This file is secret
- cipher BF-CBC # Blowfish (default)
- ;cipher AES-128-CBC # AES
- ;cipher DES-EDE3-CBC # Triple-DES
- # Разрешить компрессию трафика по соединению.
- # Если включено на сервере, то у клиента тоже должно быть.
- comp-lzo yes
- # Максимальное количество одновременных соединений.
- max-clients 100
- # Группа и пользователь, под которыми будет работать демон сервера.
- user nobody
- group nobody
- persist-key
- persist-tun
- # Выводить информацию о текущих подключениях в данный файл.
- # Файл обнуляется каждую минуту, а запись идет с самого начала.
- status /var/log/openvpn/openvpn-status.log
- # Писать логи в файл.
- log /var/log/openvpn/openvpn.log
- log-append /var/log/openvpn/openvpn.log
- # Уровень отладки:
- # 0 - выводятся только фатальные ошибки
- # 4 - рекомендуется
- # 5 и 6 - помогут при отладке
- # 9 - выводится все подряд
- verb 3
- # Не больше указанного здесь количества одинаковых (повторяющихся)
- # сообщений будет выведено в файл.
- ;mute 20
- if_bridge_load="YES"
- if_tap_load="YES"
- cloned_interfaces="bridge0 tap0"
- ifconfig_nfe0="up"
- ifconfig_tap0="up"
- ifconfig_bridge0="inet 192.168.7.250 netmask 0xffffff00 broadcast 192.168.7.255 addm nfe0 addm tap0"
- openvpn_enable="YES"
- openvpn_if="tap"
- openvpn_configfile="/usr/local/etc/openvpn/server.conf"
- # kldload if_tap
- # kldload if_bridge
- # ifconfig tap0 create
- # ifconfig bridge0 create
- # ifconfig bridge0 addm nfe0
- # ifconfig bridge0 addm tap0
- # ifconfig bridge0 inet 192.168.7.250 netmask 0xffffff00
- # service openvpn start
- # sockstat -4 -l | grep openvpn
- nobody openvpn 1316 4 udp4 *:1194 *:*
- # pwd
- /usr/local/etc/openvpn/easy-rsa
- # sh
- # . ./vars
- # ./build-key client
- Generating a 1024 bit RSA private key
- .....................................++++++
- .........++++++
- writing new private key to 'client.key'
- -----
- You are about to be asked to enter information that will be incorporated
- into your certificate request.
- What you are about to enter is what is called a Distinguished Name or a DN.
- There are quite a few fields but you can leave some blank
- For some fields there will be a default value,
- If you enter '.', the field will be left blank.
- -----
- Country Name (2 letter code) [RU]:
- State or Province Name (full name) [Russia]:
- Locality Name (eg, city) [Yekaterinburg]:
- Organization Name (eg, company) [www.example.org]:
- Organizational Unit Name (eg, section) [none]:
- Common Name (eg, your name or your server's hostname) [client]:
- Name [Nekit]:
- Email Address [nekit@info-x.org]:
- Please enter the following 'extra' attributes
- to be sent with your certificate request
- A challenge password []:
- An optional company name []:
- Using configuration from /usr/local/etc/openvpn/test/openssl-0.9.8.cnf
- Check that the request matches the signature
- Signature ok
- The Subject's Distinguished Name is as follows
- countryName :PRINTABLE:'RU'
- stateOrProvinceName :PRINTABLE:'Russia'
- localityName :PRINTABLE:'Yekaterinburg'
- organizationName :PRINTABLE:'www.example.org'
- organizationalUnitName:PRINTABLE:'none'
- commonName :PRINTABLE:'client'
- name :PRINTABLE:'Nekit'
- emailAddress :IA5STRING:'nekit@info-x.org'
- Certificate is to be certified until Jan 14 06:13:31 2040 GMT (9999 days)
- Sign the certificate? [y/n]:y
- 1 out of 1 certificate requests certified, commit? [y/n]y
- Write out database with 1 new entries
- Data Base Updated
- Корневой сертификат
- Клиентский сертификат и ключ
- Ключ, созданный для дополнительной защиты (его можно и не использовать, но если сервер его использует, то и клиент должен)
- client
- # Адрес сервера
- remote vpn.example.org 1194
- # Использовать TCP или UDP?
- proto udp
- # Проверить доступность сервера. Данная опция может быть полезна
- # людям, которые выходят в интернет через соединения, которые
- # часто обрываются.
- resolv-retry infinite
- nobind
- dev tap
- ;dev tun
- ca ca.crt
- cert client.crt
- key client.key
- keepalive 10 120
- tls-auth ta.key 1
- cipher BF-CBC # Blowfish (default)
- comp-lzo
- persist-key
- persist-tun
вт, 02/12/2014 - 14:10
сб, 16/01/2016 - 21:45
вт, 24/07/2018 - 00:23
пн, 06/07/2020 - 18:12
пн, 06/07/2020 - 20:03
вт, 07/07/2020 - 11:02
вт, 07/07/2020 - 11:47
вт, 07/07/2020 - 11:55
вт, 07/07/2020 - 12:06
вт, 07/07/2020 - 12:08
вт, 07/07/2020 - 12:12
вт, 07/07/2020 - 12:31
вт, 07/07/2020 - 12:37
вт, 07/07/2020 - 13:11
вт, 07/07/2020 - 13:15
вт, 07/07/2020 - 16:53
вт, 02/12/2014 - 04:04
А нет ли случаем статьи про DoubleVPN на FreeBSD? С маршрутами дико запарился.