- Настройка OpenVPN Ubuntu 18.04 TUN
- Содержание
- Предварительная настройка
- Создаем скрипт автоматической генерации ключей и конфигов
- Генерация ключей
- Запуск сервера в Linux
- Запуск сервера в Windows
- Установка в Windows
- Установка в Linux
- Разное
- Добавление tap адаптера в Windows
- Проблемы при добавлении маршрутов в Windows
- Добавление маршрута по умолчанию через vpn соединение
- Отзыв сертификата
- Два интерфейса tun0 и tun1
- Настройка OpenVPN клиента
- Установка
- Windows
- Linux CentOS
- Linux Ubuntu
- Android
- Настройка
- Пример конфигурационного файла
- Параметры конфигурационного файла
- Сертификаты
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 2 из 12
- Файл конфигурации сервера
- Файл конфигурации клиента
- Дополнительные настройки сервера
Настройка OpenVPN Ubuntu 18.04 TUN
Содержание
Предварительная настройка
Устанавливаем сервер и дополнительные утилиты:
Отключаем интерактивный ввод данных для генерируемых ключей (удаляем ключ —interact):
Укажем параметры генерации ключей:
Создаем скрипт автоматической генерации ключей и конфигов
Права на запуск скрипта:
Создаем каталог логов:
Генерация ключей
В результате выполнения скрипта, в каталоге «название сети» будут расположены следующие файлы и директории:
Запуск сервера в Linux
Если запускаем сервер на другой машине, чем та, на которой создавали конфиги и ключи, то копируем в /etc/openvpn каталог «название сети».
OpenVPN устроен так: сколько конфигурационных файлов в директории для конфигов — столько он и запускает клиентов/серверов.
Стало быть для запуска сервера нужно:
Запуск сервера в Windows
Для Win сервера меняется путь расположения каталога с ключами:
Конфигурационный файл будет лежать тут:
Установка в Windows
Скачиваем последнюю версию клиента, в соответствии с разрядностью Windows отсюда.
OpenVPN GUI можно не устанавливать
Устанавливаем драйвер виртуального сетевого интерфейса
Указываем службе запускаться автоматически
В каталог C:\Program Files\OpenVPN\config\ копируем конфигурационный файл (sibway-external-client.ovpn).
Перезапускаем службу OpenVPN
Проверяем, установлено ли соединение. IP адрес для нового сетевого адаптера должен быть из сети 10.xxx.yyy.0/24
Теперь можно проверить связь до какого либо внутреннего адреса (из сети 10.xxx.yyy.0/24). Например до VPN сервера: 10.xxx.yyy.1:
При возникновении проблем, сообщения OpenVPN можно посмотреть в его Log файлах в каталоге C:\Program Files\OpenVPN\logs\(и сразу выслать этот файл системному администратору. После рестарта службы OpenVPN файл перезаписывается!)
Установка в Linux
В каталог /etc/openvpn копируем конфигурационный файл work-client.conf
Применяем новые параметры и перезапускаем сервис:
Смотрим в логах, как проходит подключение:
Удачное подключение заканчивается строкой:
Разное
Добавление tap адаптера в Windows
При установке openvpn в систему автоматически добавляется tap адаптер. Он и будет использоваться при запуске первого сервера/клиента.
Для каждого дополнительного сервера/клиента необходимо вручную добавить дополнительные адаптеры путем запуска скрипта:
Проблемы при добавлении маршрутов в Windows
Попробуйте увеличить значение
На практике не более 1% машин требуют значения более 5-ти (в большинстве случаев хватает 2)
Добавление маршрута по умолчанию через vpn соединение
Добавить в конфиг клиента: В Linux:
Отзыв сертификата
В случае, если вам нужно запретить подключение к серверу для какого либо клиента, необходимо отозвать сертификат этого клиент. Для этого необходимо выполнить следующее:
Источник
Два интерфейса tun0 и tun1
Прошу помощи в настройке openvpn. Здравствуйте. Подскажите как разрешить одной сети tun1 ходить в сеть tun0. Тоесть у меня на tun0 сервер а на tun1 клиент который подключён к другому серверу. Как через tun0 открывать сайты которые доступны в tun1 .например рутрекер. Все необходимый конфигурации и логи могу предоставить.
Если сервер на вашем tun1 знает про сеть на tun0, то будет работать из коробки. Но скорее всего нет и, поэтому, потребуется трансляция адреса (nat) всех ваших клиентов на tun1.
Спасибо за отклик. Вот правило которое находится в нат :iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT —to мой.айпи Вот правила фильтрации: iptables -I INPUT -i tun0 -j ACCEPT iptables -I FORWARD -s 10.8.0.0/24 -j ACCEPT iptables -I INPUT -p tcp —dport 443 -j ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -I FORWARD -i br0 -o tun1 -j ACCEPT iptables -I FORWARD -i tun1 -o br0 -j ACCEPT iptables -I INPUT -p tcp —dport 1511 -j ACCEPT
tun0 openvpn server поднятый в Debian tun1 openvpn client поднятый на том же Debian и подключённый к серверу в Болгарии.Чтоб не весь трафик шёл через сервер в Болгарии добавил вот это в конфиг route-nopull route 195.82.146.114 route 195.82.146.214 route 185.112.157.181 route 134.19.177.67 route 81.17.30.51 route 89.32.127.227 route 104.28.4.193 route 104.28.5.193 route 178.63.151.224 route 178.62.9.171 route 81.17.19.227 log openvpn.log (Разумеется остальные настройки присутствуют в клиенте,он рабочий ) Проблема такая; подключаюсь к моему серверу,все сайты открываются кроме тех что указаны в клиенте который висит на tun1. Зато в локальной сети доступны все сайты плюс те что указаны в клиенте на tun1. Объяснил проблему как смог ;))) хочу чтоб при контенте к tun0 тоесть серверу были доступны все сайты.
Debian развернут на роутере zyxel GIGA 3
# ip route default dev ppp0 scope link 10.1.30.0/24 dev br1 proto kernel scope link src 10.1.30.1 10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.1 10.211.1.6 dev tun1 proto kernel scope link src 10.211.1.5 81.17.19.227 via 10.211.1.6 dev tun1 81.17.30.51 via 10.211.1.6 dev tun1 89.32.127.227 via 10.211.1.6 dev tun1 104.28.4.193 via 10.211.1.6 dev tun1 104.28.5.193 via 10.211.1.6 dev tun1 134.19.177.67 via 10.211.1.6 dev tun1 178.62.9.171 via 10.211.1.6 dev tun1 178.63.151.224 via 10.211.1.6 dev tun1 185.58.188.37 dev ppp0 proto kernel scope link src 185.58.188.129 185.112.157.181 via 10.211.1.6 dev tun1 192.168.1.0/24 dev br0 proto kernel scope link src 192.168.1.19 195.82.146.114 via 10.211.1.6 dev tun1 195.82.146.214 via 10.211.1.6 dev tun1
tun не то же самое что и tap.
В вашем случае, похоже, нужен именно tap.
can not be used with Android or iOS devices Мне именно на айфоне труден доступ к закрытым сайтам ;)) Tap не подходит наверное !
Вот правило которое находится в нат
Пожалуйста, пользуйтесь lorcode. Ваши адреса без картинки сети с подписями, к сожалению, ничего не говорят.
Эксперименты надо проводить без правил фильтрации, чтобы не искать где проблема в разных местах.
Проблема такая; подключаюсь к моему серверу,все сайты открываются кроме тех что указаны в клиенте который висит на tun1. Зато в локальной сети доступны все сайты плюс те что указаны в клиенте на tun1.
Искать проблему лучше не по сайтам, а по traceroute, но можно и через утилиту tcptraceroute.
Источник
Настройка OpenVPN клиента
В данной инструкции подробно описан процесс настройки клиента OpenVPN на примере операционных систем Windows и Linux. Также, с ее помощью можно настроить скиента на Android.
Установка
Windows
Заходим на официальную страницу загрузки openvpn и скачиваем клиента для нужной Windows:
Запускаем скачанный файл и устанавливаем программу, нажимая «Далее».
Linux CentOS
Устанавливаем репозиторий EPEL:
yum install epel-release
yum install openvpn
Linux Ubuntu
apt-get install openvpn
Android
Установка выполняется из Google Play. Набираем в поиске OpenVPN Connect — нажимаем установить и принимаем условия.
Настройка
После установки программы конфигурационный файл не создается автоматически и его нужно создать вручную.
В системах Windows создаем файл config.ovpn в папке %programfiles%\OpenVPN\config.
* имя файла может быть любым, расширение должно быть .ovpn.
Для создания конфигурационного файла в Linux выполняем команду:
* чтобы служба openvpn автоматически выполняла соединение, необходимо, чтобы конфигурационный файл назывался client.conf.
Пример конфигурационного файла
client
dev tun
proto udp
remote 192.168.0.15 443
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
dh dh2048.pem
tls-client
tls-auth ta.key 1
float
keepalive 10 120
comp-lzo
verb 0
Параметры конфигурационного файла
Параметр | Значения | Описание |
---|---|---|
client | Строка говорит о том, что конфигурационный файл описывает клиентское подключение (программа сама устанавливает соединение, а не ждет, как сервер). | |
dev | tap или tun | Выбор виртуального сетевого драйвера. TUN — сетевой уровень модели OSI, оперирует IP-пакетами. TAP — эмулирует Ethernet устройство и работает на канальном уровне модели OSI, оперируя кадрами Ethernet. Настраивая OpenVPN клиента, в большинстве случаев, необходимо выбирать tun. TAP необходимо использовать для работы определенных сервисов, например DHCP. |
dev-node | любая строка | Параметр используется в системах Windows в случаях, если имеется несколько сетевых интерфейсов. Значение этого параметра должно содержать название сетевого подключения, через который должен работать OpenVPN. |
proto | udp или tcp | Указывает, какой протокол использовать для передачи данных. В большинстве случаев, лучше использовать UDP, так как данный протокол создает меньше нагрузки на сеть. |
remote | VPN-сервер и порт | Задает сервер, к которому должен подключаться клиент, а также сетевой порт (по умолчанию 1194), на котором OpenVPN принимает запросы. Можно указать несколько строк. |
remote-random | Если указано несколько строк remote, данный параметр говорит, что необходимо подключаться к удаленным серверам в случайном порядке. | |
resolv-retry | количество секунд или infinite | Используется в тех случаях, когда в качестве сервера указано доменное имя. Параметр задает время в секундах для повторного переподключения, если не удалось узнать имя сервера. infinite — держать связь с сервером постоянно. |
nobind | Клиент использует динамический порт для подключения. | |
user | учетная запись | Задает определенного пользователя для работы клиента (только для UNIX-систем). |
group | группа | Задает определенную группу для работы клиента (только для UNIX-систем). |
persist-key | Не перечитывает ключи при перезагрузке сервиса OpenVPN. | |
persist-tun | Не перечитывает параметры туннеля при перезагрузке сервиса OpenVPN. | |
http-proxy | сервер прокси и порт | Использовать прокси-сервер для подключения. |
http-proxy-retry | Переподключаться к прокси-серверу, если связь была разорвана. | |
http-proxy-timeout | количество секунд | Время, через которое выполнять попытки переподключения к прокси-серверу. |
mute-replay-warnings | Параметр стоит задавать при использовании беспроводного соединения. Он отключит дублирование предупреждений пакетов. | |
ca | пут к сертификату | Корневой сертификат удостоверяющего центра. Генерируем на сервере. |
cert | пут к сертификату | Открытый ключ клиента. Генерируем на сервере. |
key | пут к сертификату | Закрытый ключ клиента. Генерируем на сервере. |
dh | пут к сертификату | Ключ с алгоритмом Diffie-Hellman (Диффи-Хеллмана). |
remote-cert-tls | сервер | Исключает возможность mitm атаки, включая верификацию сертификата сервера. |
tls-client | Указание на то, что это клиент TLS. | |
tls-auth | ta.key 1 | Дополнительный уровень аутентификации посредством ключа TLS. |
float | Удаленный хост может менять IP-адрес в процессе соединения, при этом последнее не будет разорвано. | |
keepalive | секунд1 секунд2 | Пинговать каждые секунд1 сервер и если в течение секунд2 не будут получены ответные пакеты, перезапустить подключение. |
cipher | алгоритм | Указывает алгоритм шифрования. Примеры: AES-256-CBC, AES-128-CBC, BF-CBC, DES-EDE3-CBC. |
comp-lzo | Использовать сжатие. | |
verb | число от 0 до 9 | Уровень детализации лога. 0 отключает отладочную информацию. |
mute | число | Указывает сколько лог-сообщений может отображаться для каждой категории события. |
auth-user-pass | ничего или путь к файлу | Говорит клиенту, что необходима аутентификация. Если не указан путь к файлу, клиент выкинет окно для авторизации, иначе прочитает данные из файла. |
ipchange | команда или путь к скрипту | Выполняет команду при смене IP. |
connect-retry | секунд | Переподключиться к серверу через указанное количество секунд, если соединение было разорвано. |
connect-retry-max | число | Сколько раз повторять соединение, если оно было разорвано. |
shaper | байт | Задает максимальную скорость передачи данных для исходящего трафика. |
tun-mtu | число | Задает MTU. |
status | путь к файлу | Путь к фалу хранения статуса. |
log | путь к файлу | Путь к лог-файлу. |
askpass | путь к файлу | Путь к файлу с паролем для приватного ключа (private key password). |
Наиболее полный и актуальный список параметров для OpenVPN можно получить командой openvpn —help (в Linux и Windows).
Сертификаты
Клиентские сертификаты генерируются на стороне сервера. Процедура следующая.
Источник
Установка OpenVPN на Ubuntu 18.04 LTS. Часть 2 из 12
Файл конфигурации сервера
По умолчанию в директории /etc/openvpn/ конфигурационных файлов нет, но есть две директории для них — server и client . Файл конфигурации нужно создать самостоятельно и поместить в директорию server (для сервера) или client (для клиента). Образец файла конфигурации OpenVPN можно взять из документации:
Приведем файл конфигурации к следующему виду:
Директива server является макрокомандой и имеет синтаксис:
Она будет преобразована по следующему алгортиму:
Директива route-gateway используется совместно с директивой route и задает шлюз по умолчанию для VPN-сети. Если параметр gateway директивы route не задан — он будет получен из директивы route-gateway .
Директива topology приобретает смысл совместно с dev tun и предусматривает три варианта: net30 , p2p , subnet .
Универсальным решением для VPN-сервера является net30 — это значение по умолчанию. Сервер будет работать со всеми версиями Windows, Linux, Mikrotik. Недостатком топологии является избыточное расходование адресного пространства — четыре ip-адреса на каждого VPN-клиента. Топология net30 фактически «устарела» и сохраняется исключительно для поддержки старых Windows клиентов.
Значение subnet рекомендуется для VPN-сервера, клиентами которого являются Linux и Windows 8.2 и выше. Устройство tun настроено на использование ip-адреса и маски сети как «традиционная» широковещательная сеть. Сетевой и широковещательный ip-адреса не должны использоваться — хотя tun не имеет понятия о широковещании, клиенты Windows не смогут правильно использовать эти адреса. Все остальные ip-адреса в сети доступны для использования.
Значение p2p не может использоваться в системах Windows и не подходит, если сервер или любой клиент может быть Windows. В этой топологии все узлы настроены как настоящие двухточечные ссылки — каждый ip-адрес может использоваться, включая первый и последний. Другими словами, в сети 10.8.0.0/24 в топологии p2p можно использовать все 256 ip-адресов. Но Windows считает первый и последний ip-адреса сетевым и широковещательным адресами.
Директивы persist-key и persist-tun обеспечивают правильную работу после понижения прав, т.е. при использовании nobody и nogroup .
Директива keepalive является макрокомандой и будет преобразована в директивы ping и ping-restart
Кроме того, эта макрокоманда отправит две директивы на клиент (так что в файле конфигурации клиента они не нужны)
Все готово, можно запускать VPN-сервер (подробности здесь):
Здесь config — это имя файла конфигурации в директории server , но без расширения .conf . Чтобы VPN-сервер запускался при загрузке системы:
Смотрим статус запущенной службы:
Смотрим наличие сетевого интерфейса tun0 :
Файл конфигурации клиента
Первым делом нужно установить пакет OpenVPN:
Создаем директорию keys и копируем ключи:
Копируем образец файла конфигурации клиента:
Приведем файл конфигурации к следующему виду:
Все готово, можно запускать VPN-клиент (подробности здесь):
Здесь config — это имя файла конфигурации в директории client , но без расширения .conf . Чтобы VPN-клиент запускался при загрузке системы:
Смотрим статус запущенной службы:
Смотрим наличие сетевого интерфейса tun0 :
Пингуем сервер по адресу 10.8.0.1 :
Дополнительные настройки сервера
1 Если нужно использовать VPN-туннель для маршрутизации всего трафика клиентов, добавляем в файл конфигурации еще три строки.
Теперь клиенты будут использовать туннель VPN в качестве шлюза по умолчанию и DNS-сервера 208.67.222.222 и 208.67.220.220 . В этом случае надо внести изменения и в файл конфигурации клиента. Какие изменения — зависит от того, используется systemd-resolved или нет.
При подключении к серверу сетевые настройки клиента будут изменяться, а при отключении от сервера — настройки будут возвращаться в нормальное состояние, как было до подключения. Скрипт update-resolv-conf доступен сразу после установки пакета openvpn , чтобы получить скрипт update-systemd-resolved — надо установить пакет openvpn-systemd-resolved .
2 По умолчанию сервер OpenVPN использует порт 1194 и протокол UDP — но это всегда можно изменить.
При переключении протокола на TCP, нужно изменить значение директивы explicit-exit-notify с 1 на 0, так как эта директива используется только для UDP. Иначе, при использовании TCP, эта директива вызовет ошибки при запуске службы.
Кроме того, при изменении протокола и порта сервера в файле конфигурации сервера, надо внести изменения в файл конфигурации клиента — указать тот же порт и протокол.
3 По умолчанию клиенты сети VPN могут «общаться» только с сервером OpenVPN. Для того, чтобы клиенты могли взаимодействовать друг с другом через сеть VPN необходимо в конфигурационном файле раскомментировать соответствующую директиву:
4 Сервер динамически выдает клиентам свободные ip-адреса из заданного диапазона. Наличие директивы ifconfig-pool-persist указывает, что перед тем как выдать клиенту свободный адрес из пула, сервер должен свериться с файлом ipp.txt , в котором прописывается привязка Common Name сертификата к ip-адресу.
5 Директива client-config-dir предписывает читать файлы конфигураций клиентов в указанной директории. Имена файлов конфигурации в этой директории совпадают с Common Name сертификатов клиентов. Директивы из каждого файла конфигурации применяются только для конкретного клиента.
6 Директива ccd-exclusive — VPN-клиент, имеющий сертификат с Common Name «sergey-ivanov», может подключиться к VPN-серверу, только если существует файл с именем sergey-ivanov в директории client-config-dir . Этот файл может быть даже пустым — но он должен существовать.
7 Директива duplicate-cn разрешает одновременное подключение нескольких клиентов с одинаковым Common Name. В отсутствие этой директивы сервер отключит экземпляр клиента при подключении нового клиента с таким же Common Name.
Чтобы избежать ошибки Could not determine IPv4/IPv6 protocol. Using AF_INET при запуске VPN-сервера, нужно явно указать версию протокола:
Источник