Блог о Gentoo и около-линуксовым штукам

14 декабря 2017 г.

OpenVPN на Debian 9. Шпаргалка.

05:44 Опубликовал Дмитрий Исаенко , 4 коммент.
Шпаргалка по быстрому разворачиванию OpenVPN на Debian (испытано на версии Debian 9).
Просто копируем это дело в файл, исключая подсвеченное желтым, и выполняем через source ./file .
Для начала, серверная часть. У меня возникли проблемы со стандартным EasyRSA, поэтому использую версию из апстрима.

Серверная часть:

# apt-get install openvpn
# cd /etc/openvpn
# wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.3/EasyRSA-3.0.3.tgz
# tar zxvf EasyRSA-3.0.3.tgz 
# rm EasyRSA-3.0.3.tgz
# cd EasyRSA-3.0.3/
# vim vars
if [ -z "$EASYRSA_CALLER" ]; then
        echo "You appear to be sourcing an Easy-RSA 'vars' file." >&2
        echo "This is no longer necessary and is disallowed. See the section called" >&2
        echo "'How to use this file' near the top comments for more details." >&2
        return 1
fi
set_var EASYRSA "$PWD"
set_var EASYRSA_DN      "cn_only"
set_var EASYRSA_KEY_SIZE        2048
set_var EASYRSA_CA_EXPIRE       36500               # истекает через 100 лет
set_var EASYRSA_CERT_EXPIRE     36500               # истекает через 100 лет
set_var EASYRSA_SSL_CONF        "$EASYRSA/openssl-1.0.cnf"  
set_var EASYRSA_REQ_CN          "srv"               # ДОЛЖНО БЫТЬ УНИКАЛЬНЫМ
set_var EASYRSA_DIGEST          "sha256"
set_var EASYRSA_BATCH           "1"                 # не безопастно. Убдеитесь, что оно вам надо
# ./easyrsa init-pki
# ./easyrsa build-ca nopass
# ./easyrsa gen-dh
# ./easyrsa  build-server-full server nopass        # Возможны ошибки. Нужно обратить внимание
# cp ./pki/ca.crt ../server/
# cp ./pki/dh.pem ../server/
# cp ./pki/issued/server.crt ../server/
# cp ./pki/private/ ../server/
# cp ./pki/private/server.key ../server/
# cd  /etc/openvpn/server/
# openvpn --genkey --secret tls.ta
# vim /etc/openvpn/server.conf
local 192.168.1.55       # установим локальный адрес для прослушивания входящих соединений на этом интерфейсе. См. 'ip a'
port 1194
proto udp
dev tun                 # используем tun вместо tap
cipher AES-256-CBC      # на ваше усмотрение
tls-server
tls-crypt /etc/openvpn/server/tls.ta
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/server.crt
key /etc/openvpn/server/server.key
dh /etc/openvpn/server/dh.pem
server 10.0.0.0 255.255.255.0
push 'route 0.0.0.0 255.255.255.0'
push 'dhcp-option DNS 8.8.8.8'  # учитываем специфику Andoid
push 'redirect-gateway'         # установите 'def1' или 'local def1' если нужно
client-to-client
keepalive 10 120
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn-status.log
verb 3
mute 10
# vim /etc/sysctl.conf
net.ipv4.ip_forward=1
# sysctl -p
# iptables -A INPUT -p UDP --dport 1194 -j ACCEPT           # разрешаем входящие соединения на порт 1194 с любого интерфейса
# iptables -A FORWARD -s 10.0.0.0/24 -j ACCEPT              # разрешаем обмен трафиком между подсетями
# iptables -A FORWARD -d 10.0.0.0/24 -j ACCEPT              # разрешаем обмен трафиком между подсетями
# iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j MASQUERADE # используем маскарадинг
# iptables-save > /etc/iptables.up.rules
# vim /etc/network/if-pre-up.d/iptables
#!/bin/sh
/sbin/iptables-restore < /etc/iptables.up.rules
# chmod +x /etc/network/if-pre-up.d/iptables
# systemctl start openvpn@server
# systemctl enable openvpn@server
Сервер настроен. Но нет ни одного ключа для клиентов. Тут два варианта — делать всё ручками или воспользоваться готовым скриптом.

Вариант "всё ручками":

# cd /etc/openvpn/EasyRSA-3.0.3/
# ./easyrsa build-client-full client1 nopass            # где client1 имя клиентских файлов
# cp pki/private/client1.key /home/user/
# cp pki/issued/client1.crt /home/user/
# cp pki/ca.crt /home/user/
# cp /etc/openvpn/server/tls.ta /home/user/
# vim /home/user/client1.ovpn                           # дальше на ваше усмотрение
client
tls-client
tls-crypt tls.ta
dev tun
proto udp
remote hostname.org.ru 1194
cipher AES-256-CBC
resolv-retry infinite
nobind
ca ca.crt
cert android.crt
key android.key
persist-tun
persist-key
verb 3
remote-cert-tls server   

Вариант "всё готовым скриптом"

# cd /etc/openvpn/EasyRSA-3.0.3/
Идём качать последнюю версию ovpnWrapper: https://github.com/developersu/ovpnWrapper/releases
Качаем его и распаковываем в эту директорию.
Далее идём читать инструкцию сюда: https://developersu.blogspot.ru/2017/12/ovpnwrapper.html

Готово!
Если сервер OpenVPN находится за NAT, то будет приятным дополнением влепить правила на гейтвее (роутере, как правило):
# route add -net 10.0.0.0 netmask 255.255.255.0 gw 192.168.1.55
Тут надо заменить последнее на адрес OpenVPN сервера. Ну и порт к нему прокинуть тоже не помешает - 1194 ;)
Чтобы после перезагрузки это дело не слетело, идём в Luci→Сеть→Статические маршруты

И добавляем новое правило:
* тут указан ip 192.168.1.5 но для данного примера стоит указать 192.168.1.55 как описано ранее

Сохраняем, применяем. Перезагружать не требуется.

На этом всё =)
Пользуйтесь!

4 комментария:

  1. Отличная статья , Спасибо.

    ОтветитьУдалить
  2. Для клиента Debian OpenVPN
    Устанавливаете OpenVPN
    # apt-get install openvpn

    1. Если создавали файлы ручками
    Копируете файлы с сервера на клиента в папку /etc/openvpn/
    client1.key
    client1.crt
    ca.crt
    tls.ta
    client1.ovpn

    Переименовываете client1.ovpn в client.conf

    2. Если создавали файлы скриптом
    Копируете файл client1.ovpn с сервера на клиента в папку /etc/openvpn/
    Переименовываете client1.ovpn в client.conf

    Перезапускаем OpenVPN

    #systemctl restart openvpn

    ОтветитьУдалить
  3. Забыл добавить что если файлы созданы ручками после копирования надо поменять права на файлы
    # cd /etc/openvpn/
    #chmod 600 tls.ta
    #chmod 600 client1.key

    ОтветитьУдалить