Создаем собственный VPN на Debian fullz shops

Мануал по настройке собственного VPN сервера. Для более удобного изучения материала прилагаю ссылку на источник.

Debian. Поднимаем свой OpenVPN сервер, настраиваем форвардинг и клиента

Мне понадобилось настроить OpenVPN сервер, для того, чтобы возможно было выходить через него в интернет и сделать доступными сервера во внутренней сети. Проиллюстрировать результат можно так:

Инструкция для Debian, но не думаю что будет что-то сильно отличаться на FreeBSD.
Установка и настройка сервера

Входим на сервер и устанавливаем OpenVPN:

apt-get install openvpn​

Создаем файл /etc/openvpn/server.conf со следующим содержимым:

mode server
daemon vpn-server
#local 203.0.113.42
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem # либо dh2048.pem, в зависимости от размера ключа
tls-server
tls-auth ta.key 0
cipher DES-EDE3-CBC
server 192.168.50.0 255.255.255.0
push «redirect-gateway»
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log-append /var/log/openvpn/openvpn.log
verb 4
mute 20
client-to-client
client-config-dir ccd
route 192.168.50.0 255.255.255.0​

А теперь поясню параметры:

mode server — означает, что OpenVPN будет работать в режим сервера;
daemon — указываем что будет работать в режиме демона, stderr/stdout будет посылаться в syslog;
local 203.0.113.42 — можете указать конкретный IP-адрес на котором надо слушать (например если у вас несколько внешних сетевых интерфесов);
port 1194 — порт который будет слушать;
proto udp — будем использовать UDP, так как он экономичнее по трафику, вы можете также указать «tcp»;
dev tun — использовать управляемый IP-туннель, также возможно использовать «tap» (ethernet tunnel);
ca ca.crt — путь до сгенерированного нами файла корневого сертификата;
cert server.crt — путь до сгенерированного нами файла сертификат сервера;
key server.key — путь до сгенерированного нами файла приватного ключа сервера;
dh dh1024.pem — путь до сгенерированного нами файла с параметрами Diffie Hellman (используется только для подключения через TLS-сервер);
tls-server — включаем TLS и во время handshake представиться сервером;
tls-auth ta.key 0 — предоставляем tls-ключ, как дополнительный слой защиты. Опция «0» (directionality) — говорит о направлении, на другой стороне (клиенте) надо указывать другое направление «1»;
cipher DES-EDE3-CBC — используемый тип шифрования пакетов;
server 192.168.50.0 255.255.255.0 — выделяем IP-адреса с диапазоном «192.168.50.1-192.168.50.255», причем адрес «192.168.50.1» займет сам сервер, остально для клиентов;
push «redirect-gateway» — при успешном подключении к серверу, клиенту будет установлен новый default-gateway от vpn-сервера (см. netstat -r после соединения), таким образом весь трафик пойдет через vpn-сервер;
ifconfig-pool-persist ipp.txt — файл, в котором будут храниться связи «профиль клиента, выделенный ip-адрес», и после переподключения будет выдан снова прежний адрес;
keepalive 10 120 — устанаваливаем количество секунд для ping и ping-restart соответвенно (Нужно для поддержания подключенного состояния между соединениями к vpn-серверу);
comp-lzo — включаем LZO-компрессию трафика;
user nobody — понижаем пользовательские привелегии vpn-сервера;
group nogroup — понижаем пользовательские привелегии vpn-сервера;
persist-key — при получении сигнала SIGUSR1 или срабатывания ping-restart не нужно перечитывать сертификаты, так как у сервера не хватит привелегий (См. предыдущий пункт, «nobody:nogroup») на эти действия;
persist-tun — при получении сигнала SIGUSR1 или срабатывания ping-restart не нужно пересоздавать tun/tap устройства;
status /var/log/openvpn/openvpn-status.log — путь до status-лога;
log-append /var/log/openvpn/openvpn.log — путь до лога vpn-сервера;
verb 4 — уровень вербойса логов, от 0 до 11, детализация по нарастающей:
0 — только фатальные ошибки;
1 — загрузочная информация, информация о соединении, сетевые ошибки;
2,3 — TLS данные и маршрутная информация;
4 — показывает параметры;
5 — показывает ‘RrWw’ символы в консоли для каждого пакета, отправленные и принятые по TCP/UDP (caps) или tun/tab (lc);
6-11 — отладочная информация повышающая детализацию лога;
mute 20 — ограничиваем количество однотипных логов;
client-to-client — разрешаем клиентам видеть друг-друга в сети;
client-config-dir ccd — каталог с кастомными настройками для клиента (создайте файл «ccd/» для того чтобы указывать кастомные настройки для профиля someclient);
route 192.168.50.0 255.255.255.0 — добавляем роуты в таблицу роутов сервера, для клиентов надо использовать iroute 192.168.50.0 255.255.255.0, либо пушать роуты:
push «route 192.168.50.0 255.255.255.0»
Для того чтобы разобраться с параметрами, я читал OpenVPN: Server configuration file и man openvpn.

Создаем каталог для логов:

mkdir /var/log/openvpn/​

Дальше ищем каталог «easy-rsa»:

find /usr -type d -name «easy-rsa»​

В новых версиях easy-rsa надо устанавливать отдельно:
apt-get install easy-rsa​
после чего надо перейти в каталог «/usr/share/easy-rsa/».

Теперь необходимо создать ssl-сертификаты и ключи. Для этого перейдем в каталог easy-rsa, активируем окружение vars и выполним необходимые команды:

# Переходим в каталог «easy-rsa», который мы нашли ранее
cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/

# Сделаем симлинк на настройки openssl (если будет другая версия, то сами укажите какая нужна вместо «openssl-1.0.0.cnf»)
ln -s openssl-1.0.0.cnf openssl.cnf

# Активация окружения
source vars

# Создаем сертификат
./build-ca

# Создаем ключ сервера
./build-key-server server

# Создаем ключ Диффи Хельман
./build-dh

# Генерируем tls-auth ключ
openvpn —genkey —secret keys/ta.key

Вы можете предварительно отредактировать файл vars, указав необходимые настройки, например «код страны», «город», «название организации», «email» и т.д. Чтобы не указывать их каждый раз при генерации сертификата.

Далее, скопируем сгенерированные ключи в /etc/openvpn:

cp keys/{ca.crt,server.crt,dh1024.pem,server.key,ta.key} /etc/openvpn​

Запускаем OpenVPN:

/etc/init.d/openvpn start

Предоставляем нашим клиентам доступ в интернет
Теперь, необходимо настроить на сервере доступ в интернет подключившимся по OpenVPN клиентам. Допустим, что IP-адрес внешнего интерфейса «203.0.113.42» (вы можете узнать какой у вас в ifconfig) и так как у нас Debian, то создадим правила в iptables:

iptables -A FORWARD -s 192.168.50.0/24 -j ACCEPT
iptables -A FORWARD -d 192.168.50.0/24 -m state —state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.50.0/24 -j SNAT —to-source 203.0.113.42

Если вы впервые используете iptables, то создайте файл «/etc/iptables.rules» и выгрузите туда инструкции приведенные выше:
iptables-save > /etc/iptables.rules​

После чего, добавьте в автозагрузку:
echo «pre-up iptables-restore > /etc/network/interfaces​

И при загрузке ОС будут активироваться ваши правила в /etc/iptables.rules
Включаем форвардинг в ядре, в файле /etc/sysctl.conf раскомментируем строчку:

net.ipv4.ip_forward=1​

Чтобы не перезагружаться сообщаем ядру о включении форвардинга:

echo 1 > /proc/sys/net/ipv4/conf/all/forwarding​

На стороне сервера все настроили, теперь настроим клиента и уже можно будет пользоваться!

Генерация ключей для клиента
Теперь необходимо сгенерировать сертификаты для каждого клиента, которому потребуется доступ к подключению к серверу OpenVPN:

cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/​

# Активация окружения
source vars

# Создаем ключ для пользователя
./build-key someclient
# Либо с дополнительной защитой по паролю
#./build-key-pass someclient

# Создаем архив с ключами для клиента (ниже мы его будем скачивать)
cd keys
tar -czf /home//openvpn_keys.tgz someclient.* ca.crt ta.key

Если понадобится добавить еще одного пользователя, то сделайте тоже самое, только меняйте «someclient» на что-то другое.

Использование
Переключаемся на клиентский компьютер (в моём случае это Xubuntu) и копируем ключи с сервера:

mkdir /etc/openvpn/someserver
cd /etc/openvpn/someserver
scp username@someserver:eek:penvpn_keys.tgz .
tar -xzf openvpn_keys.tgz
rm openvpn_keys.tgz​

Создаем файл /etc/openvpn/someserver.conf:

client
remote 203.0.113.42
redirect-gateway def1
port 1194
dev tun
proto udp
resolv-retry infinite
nobind
pull
user nobody
group nogroup
persist-key
persist-tun
ca /etc/openvpn/someserver/ca.crt
cert /etc/openvpn/someserver/someclient.crt
key /etc/openvpn/someserver/someclient.key
tls-client
tls-auth /etc/openvpn/someserver/ta.key 1
cipher DES-EDE3-CBC
comp-lzo
mute 20
verb 3
log openvpn.log​

А теперь поясню параметры:

client — говорим что мы подключаемся как клиент;
remote 203.0.113.42 — указываем адрес vpn-сервера;
redirect-gateway def1 — режим, который разрешает смену default-gateway, а после остановки vpn-соединения возвращает gateway вашего провайдера;
port 1194 — указываем порт vpn-сервера;
dev tun — указываем такое же устройство, как и у vpn-сервера;
proto udp — используем UDP, так как vpn-сервер тоже на UDP;
resolv-retry infinite — ресолвим vpn-сервер до бесконечности, полезно после потери соединения и подключения снова (например после suspend в ноутбуках);
nobind — не создаем постоянный порт для подключения клиента;
pull — разрешаем клиенту получать от vpn-сервера push-инструкции и применять их у себя (например, изменение таблицы роутов);
user nobody — понижаем пользовательские привелегии;
group nogroup — понижаем пользовательские привелегии;
persist-key — при получении сигнала SIGUSR1 или срабатывания ping-restart не нужно перечитывать сертификаты, так как у клиента не хватит привелегий (См. предыдущий пункт, «nobody:nogroup») на эти действия;
persist-tun — при получении сигнала SIGUSR1 или срабатывания ping-restart не нужно пересоздавать tun/tap устройства;
ca /etc/openvpn/someserver/ca.crt — путь до сгенерированного нами файла корневого сертификата;
cert /etc/openvpn/someserver/someclient.crt — путь до сгенерированного нами файла сертификата клиента;
key /etc/openvpn/someserver/someclient.key — путь до сгенерированного нами файла приватного ключа клиента;
tls-client — включаем TLS и во время handshake представиться клиентом;
tls-auth /etc/openvpn/someserver/ta.key 1 — предоставляем tls-ключ, как дополнительный слой защиты;
cipher DES-EDE3-CBC — используемый тип шифрования пакетов (должен совдадать с серверным);
comp-lzo — включаем LZO-компрессию трафика;
verb 3 — уровень вербойса логов, от 0 до 11. Подробнее описывал в такой же секции конфига сервера;
mute 20 — ограничиваем количество однотипных логов;
log openvpn.log — путь до лога клиента.
Для того чтобы разобраться с параметрами, я читал OpenVPN: Client configuration file и man openvpn.

Запускаемся
Можно запустить все указанные в AUTOSTART (смотрите /etc/default/openvpn) подключения:

service openvpn start​

Или запустить конкретное подключение так:

sudo openvpn /etc/openvpn/someserver.conf
# Или так
sudo service openvpn start someserver

Проверить подключение можно так:

$ sudo route | grep «tun0»

Если видим подключения с интерфейсом «tun0», то всё впорядке.

Проверим работает ли интернет через наш OpenVPN-сервер, для этого зайдите на сайт http://www.geoiptool.com/ и убедитесь, там ли ваш сервер находится географически? Если да, то всё окей, иначе смотрите логи на клиенте /etc/openvpn/openvpn.log и пишите комментарии.

Отключаем автоматическое поднятие соединения на клиенте
Я пользуюсь Xubuntu, и отключаю автостарт всех OpenVPN-профайлов так:

emacs /etc/default/openvpn​

Находим AUTOSTART=»none» и расскоментируем. Также там будут примеры как указать нужный профиль, например можно указать созданный нами профиль AUTOSTART=»someserver».

Если у вас клиент FreeBSD, то надо добавить в /etc/rc.conf:

openvpn_enable=»YES»
openvpn_if=»tun»
openvpn_configfile=»/etc/openvpn/someserver.conf»

Дополнительный манул, взятый из аналогичных форумов.

Вам нужно авторизоваться, чтобы просмотреть содержимое. fullz shops

Опубликовано

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

Ваш адрес email не будет опубликован.