Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.
Наступна ревізія | Попередня ревізія Наступна ревізія Both sides next revision | ||
vpn [2014/11/20 14:35] wombat створено |
vpn [2014/11/24 01:23] wombat [Сервер] примечание о нескольких OpenVPN с одним IP |
||
---|---|---|---|
Рядок 1: | Рядок 1: | ||
====== VPN ====== | ====== VPN ====== | ||
- | ===== Сервер ===== | + | ===== Установка ===== |
+ | |||
+ | ==== в Debian GNU/Linux ==== | ||
sudo apt-get install openvpn | sudo apt-get install openvpn | ||
+ | |||
+ | ===== Настройка ===== | ||
+ | |||
+ | ==== Сервер ==== | ||
+ | |||
+ | Чтобы организовать защищённое подключение, нужно сгенерировать секретный ключ доступа: | ||
# openvpn --genkey --secret static.key | # openvpn --genkey --secret static.key | ||
+ | |||
+ | Для подключения со статическим ключом доступа: | ||
+ | |||
+ | sudo openvpn --secret /etc/openvpn/static.key --proto tcp-server --lport 1194 --dev tun1 --ifconfig 10.9.8.1 10.9.8.2 | ||
+ | |||
+ | Если планируется подключаться к серверу только через SSH-тоннель (либо [[sslh|через SSLH]]), то нужно добавить к параметрам IP-адрес, к которому будет прикреплён сервер: | ||
sudo openvpn --secret /etc/openvpn/static.key --proto tcp-server --local 127.0.0.1 --lport 1194 --dev tun1 --ifconfig 10.9.8.1 10.9.8.2 | sudo openvpn --secret /etc/openvpn/static.key --proto tcp-server --local 127.0.0.1 --lport 1194 --dev tun1 --ifconfig 10.9.8.1 10.9.8.2 | ||
+ | |||
+ | Это позволит объединить сервер и подключившийся к нему компьютер в одну локальную сеть, однако ещё не даёт доступа подключённому компьютеру в интернет. Чтобы получить выход в интернет через такой сервер, на нём нужно включить NAT: | ||
# echo 1 > /proc/sys/net/ipv4/ip_forward | # echo 1 > /proc/sys/net/ipv4/ip_forward | ||
- | # iptables -A FORWARD -i venet0 -o tun1 -m state --state ESTABLISHED,RELATED -j ACCEPT | + | # iptables -A FORWARD -i <NET_IF> -o tun1 -m state --state ESTABLISHED,RELATED -j ACCEPT |
- | # iptables -A FORWARD -s 10.9.8.0/24 -o venet0 -j ACCEPT | + | # iptables -A FORWARD -s 10.9.8.0/24 -o <NET_IF> -j ACCEPT |
- | # iptables -t nat -A POSTROUTING -s 10.9.8.0/24 -o venet0 -j SNAT --to 162.211.231.29 | + | # iptables -t nat -A POSTROUTING -s 10.9.8.0/24 -o <NET_IF> -j SNAT --to <SERVER_IP> |
+ | |||
+ | ''<NET_IF>'' -- это "внешний" сетевой интерфейс сервера (через который осуществляется доступ в Интернет). | ||
+ | ''<SERVER_IP>'' -- это IP-адрес сервера на внешнем сетевом интерфейсе. | ||
+ | |||
+ | **Примечание:** Если на сервере запустить несколько копий OpenVPN, указывая им один и тот же IP сервера, то сетевые пакеты будут свободно перемещаться из одной VPN в другую. Т.е. получается нечто вроде моста. | ||
===== Клиент ===== | ===== Клиент ===== | ||
+ | |||
+ | Для начала нужно скопировать секретный ключ доступа, сгенерированный на сервере, к себе на компьютер. Расположить его можно в ''/etc/openvpn/static.key'', как и на сервере. | ||
+ | |||
+ | ==== Прямое подключение ==== | ||
+ | |||
+ | sudo openvpn --proto tcp-client --remote <SERVER_IP> <SERVER_PORT> --dev tun1 --ifconfig 10.9.8.2 10.9.8.1 | ||
+ | |||
+ | |||
+ | ==== Через прокси-сервер ==== | ||
+ | |||
+ | sudo openvpn --proto tcp-client --remote <SERVER_IP> <SERVER_PORT> --http-proxy <PROXY> <PROXY_PORT> --dev tun1 --ifconfig 10.9.8.2 10.9.8.1 | ||
+ | |||
+ | |||
+ | ==== Через SSH-тоннель ==== | ||
+ | |||
+ | ssh -f -N -L5611:localhost:1194 -p <SERVER_SSH_PORT> <SERVER_IP> | ||
+ | sudo openvpn --proto tcp-client --secret /etc/openvpn/static.key --remote localhost 5611 --dev tun1 --ifconfig 10.9.8.2 10.9.8.1 | ||
+ | |||
+ | === DD-WRT === | ||
+ | |||
+ | Если в качестве SSH-клиента используется [[https://matt.ucc.asn.au/dropbear/dropbear.html | Dropbear]] (как в [[dd-wrt|DD-WRT]]), тоннель через прокси нужно устанавливать следующим образом: | ||
+ | |||
+ | ssh -f -N -L 1194:localhost:1194 -p <SSH_SERVER_PORT> <SSH_SERVER -J 'corkscrew <PROXY_SERVER> <PROXY_PORT> <SSH_SERVER> <SSH_SERVER_PORT>' | ||
+ | openvpn --proto tcp-client --secret /jffs/etc/openvpn/static.key --remote localhost 1194 --dev tun1 --ifconfig 10.9.9.3 255.255.255.0 | ||
+ | |||
+ | Для маршрутизатора удобнее сгенерировать SSH-ключ, чтобы обеспечить его беспарольное подключение к серверу. | ||
+ | |||
+ | ssh-keygen | ||
+ | |||
+ | Затем загрузить полученные файлы ''id_rsa'' и ''id_rsa.pub'' в папку ''/jffs/'' маршрутизатора (подразумевается наличие файловой системы JFFS в маршрутизаторе), и сконвертировать закрытый ключ в формат Dropbear: | ||
+ | |||
+ | dropbearconvert openssh dropbear /jffs/id_rsa /jffs/id_rsa_dropbear | ||
+ | |||
+ | Открытый ключ нужно загрузить на VPN-сервер, к которому будет подключаться маршрутизатор в домашний каталог пользователя, от имени которого будет производиться подключение. Например, если это будет пользователь "stavrida", то дописать содержимое только что сгенерированного файла ''id_rsa.pub'' в файл ''/home/stavrida/.ssh/authorized_keys'' на VPN-сервере. | ||
+ | |||
+ | SSH-тоннель в этом случае следует устанавливать так: | ||
| | ||
- | ssh -f -N -L5611:localhost:1194 -p 443 wombat.org.ua | + | ssh -y -i /jffs/id_rsa_dropbear -f -N -L 1194:localhost:1194 -p <SSH_SERVER_PORT> <SSH_SERVER -J 'corkscrew <PROXY_SERVER> <PROXY_PORT> <SSH_SERVER> <SSH_SERVER_PORT>' |
- | sudo openvpn --proto tcp-client --secret /etc/openvpn/WOU.key --remote localhost 5611 --dev tun1 --ifconfig 10.9.8.2 10.9.8.1 | + | |
- | route del default | + | ==== Новый маршрут ==== |
- | sudo route add 195.22.132.22 eth0 | + | |
- | sudo route add 195.22.132.2 eth0 | + | sudo route add -net 10.9.8.0 netmask 255.255.255.0 gw 10.9.8.1 |
- | sudo route add 195.22.132.3 eth0 | + | sudo route del default |
sudo route add default gw 10.9.8.1 | sudo route add default gw 10.9.8.1 | ||
- | sudo openvpn --proto tcp-client --remote wombat.org.ua 443 --http-proxy <PROXY> <PROXY_PORT> --dev tun1 --ifconfig 10.9.8.2 10.9.8.1 | + | Чтобы сохранить доступ к DNS-серверам своего провайдера (на всякий случай): |
+ | |||
+ | sudo route add <DNS1_IP> eth0 | ||
+ | sudo route add <DNS2_IP> eth0 | ||
+ | |||
+ | Доступ к прокси-серверу, если он есть, обязательно нужно сохранить: | ||
+ | |||
+ | sudo route add <PROXY_IP> eth0 | ||
+ | |||
+ | Чтобы использовать DNS-серверы, отличные от предоставленных провайдером, можно изменить файл | ||
+ | |||
+ | <file conf "/etc/resolv.conf"> | ||
+ | nameserver 8.8.8.8 | ||
+ | nameserver 8.8.4.4 | ||
+ | nameserver 4.2.2.1 | ||
+ | nameserver 4.2.2.2 | ||
+ | </file> | ||
+ | |||
+ | |||
+ | ------------ | ||
+ | Следует заменить ''tun1'' на ''tap1'' в случае TAP-подключения. | ||
+ | sudo openvpn --proto tcp-client --secret /etc/openvpn/static.key --remote localhost 5611 --dev tap1 --ifconfig 10.9.8.2 255.255.255.0 | ||
https://wiki.debian.org/OpenVPN | https://wiki.debian.org/OpenVPN | ||
+ | https://openvpn.net/index.php/open-source/documentation.html |