OpenVPN
Предыдущая заметка по настройке OpenVPN была написана в 2010 году. Тогда я использовал для подключения аплет для Network Manager и настройки были довольно простыми. Сейчас ситуация изменилась, изменились и требования к подключению: теперь мне нужно не только попадать в удалённую сеть, но и возвращать некоторые порты, чтобы работали торренты и некоторые другие сложные приложения. (Для простых случаев, когда просто надо куда-то сходить, я использую sshuttle.)
Во-первых, для аутентификации я всё ещё использую статические ключи («pre-shared static key»). Это не так круто, как TLS и подписывание сертификатов, но, во-первых, мне сейчас не нужна VPN-ферма с кучей непроверенных клиентов, которых может понадобится отозвать, а во-вторых, у статических ключей есть одно важное преимущество: сессия шифрована с самого первого байта и механизмы DPI не могут опознать в ней OpenVPN.
Настройка сервера
Конфиг на сервере лежит в файле /etc/openvpn/umonkey-tcp.conf
и выглядит очень просто:
dev tun
proto tcp-server
ifconfig 10.1.0.1 10.1.0.2
up ./umonkey.up
down ./umonkey.down
secret umonkey.key
ping 15
ping 15
ping-restart 45
ping-timer-rem
persist-tun
persist-key
verb 3
Рядом лежит файл umonkey-udp.conf
, который отличается двумя строками:
proto udp
ifconfig 10.2.0.1 10.2.0.2
Таким образом я получаю VPN на стандартном порту 1194, к которому могу подключить клиента по протоколу TCP или UDP, в зависимости от ситуации (UDP иногда перестаёт работать, или оператор связи его иногда режет).
Возврат портов включает скрипт umonkey.up
, выглядит так:
#!/bin/sh
# $0=cmd $1=tun_dev $2-tun_mtu $3=link_mtu $4=ifconfig_local_ip $5=ifconfig_remote_ip $6=[ init | restart ]
add_port()
{
iptables -A PREROUTING -t nat -i eth0 -p $1 --dport $3 -j DNAT --to $2:$3
iptables -A FORWARD -p $1 -d $2 --dport $3 -j ACCEPT
}
# Forward port 12345 (rtorrent).
add_port tcp $4 12345
add_port udp $4 12345
# Forward UDP port for DHT (rtorrent).
add_port udp $4 6881
Отмена этих операций прописана в аналогичном файле umonkey.down
, в котором для iptables
вместо ключа -A
указан ключ -D
.
Настройка клиента
На клиенте я использую почти такой же конфигурационный файл, только с опцией remote
и перевёрнутыми IP-адресами.
Для подключения к разным сетям я использую скрипты вроде vpn-foo
, которые выглядят примерно так:
#!/bin/sh
cd $HOME/.openvpn
umask 077
sudo openvpn --config $HOME/.openvpn/example.conf 2>&1 | tee example.log
Запускаю скрипт, делаю всё, что нужно сделать через VPN, прерываю скрипт по Ctrl+C. Вот так просто.
Следить за развитием событий можно через RSS ленту или почтовую рассылку.