Cерверная часть
Для начала установим на сервере openvpУстанавливаем сервер
apt-get install openvpn
создаем директорию для конфигов и ключей, копируем туда примеры конфигурационных файлов из директории examples openvpn сервера
mkdir /etc/openvpn/easy-rsa cp /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa mkdir /etc/openvpn/easy-rsa/keys
Создаем ключи для сервера и клиента
нужно отредактировать файл, /etc/openvpn/easy-rsa/vars точнее, нужно поменять только
значения в конце файла, например:
export KEY_COUNTRY="AE" export KEY_PROVINCE="AE" export KEY_CITY="Dubai" export KEY_ORG="mysite.com" export KEY_EMAIL="myemail@gmail.com"
от рута выполнить:
cd /etc/openvpn/easy-rsa source ./vars ./clean-all ./build-ca
может рут и не нужен, но для директории ./easy-rsa права выставить 777. далее создаем ключи сервера:
./build-key-server servername
servername - любое имя сервера что мы придумали. На задаваемые дополнительные вопросы можно просто нажимать Enter, для значений по умолчанию.
./build-key-server server
в конце:
Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y
после нужно создать dh:
./build-dh
создается dh1024.pem, далее создадим клиентские ключи:
./build-key-pkcs12 username
Здесь также как и при создании ключей сервера, можно пропускать значения по умолчанию, на вопросы про сертификат 2 раза ответить yes. В конце спросит про пароль к ключу, я оставлял без пароля, чтобы пользователь не вводил его каждый раз при соединении. В результате создадутся файлы:
username.crt
username.csr
username.key - приватный ключ
username.p12
теперь все ключи созданы, нужно настроить openvp server
Настраиваем сервер
открываем файл: /etc/openvpn/server.conf
port 1194 proto udp dev tun ca ca.crt cert server.crt key server.key dh dh1024.pem #а тут наша подсеть. т.е. всем клиентам давать адрес из этой подсети server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "redirect-gateway def1" push "dhcp-option DNS 10.8.0.1" duplicate-cn #каждые 10 секунд - посылать пинг. если нет ответа 120 секунд, то связь потеряна keepalive 10 120 #включаем компрессию comp-lzo persist-key persist-tun # логи сервера status openvpn-status.log log-append openvpn.log # уровень выводимых сообщений verb 4
Далее необходимо в iptables настроить редирект:
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT iptables -A FORWARD -j REJECT iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE exit 0
этот код добавляем в /etc/rc.local чтобы запускался при перезагрузке
Ну и, напоследок, необходимо включить форвардинг в ядре. Так как без этого работать не будет. В файле /etc/sysctl.conf раскомментируем строчку:
net.ipv4.ip_forward=1
Чтобы не перезагружаться сообщаем ядру о включении форвардинга:
echo 1 > /proc/sys/net/ipv4/conf/all/forwarding
На этом с сервером закончили, теперь о стороне клиента
Настройка клиента
необходимо передать клиенту файлы ключей клиента, которые мы создали на сервере:ca.crt username.crt username.key
на username.key пришлось права поставить 644 для того, чтобы по FTP передать можно было :(
установим на клиенте openvpn
sudp apt-get install openvpn
создадим конфигурационный файл для клиента:
############################################## # Sample client-side OpenVPN 2.0 config file # # for connecting to multi-client server. # # # # This configuration can be used by multiple # # clients, however each client should have # # its own cert and key files. # # # # On Windows, you might want to rename this # # file so it has a .ovpn extension # ############################################## # Specify that we are a client and that we # will be pulling certain config file directives # from the server. client # Use the same setting as you are using on # the server. # On most systems, the VPN will not function # unless you partially or fully disable # the firewall for the TUN/TAP interface. ;dev tap dev tun # Windows needs the TAP-Win32 adapter name # from the Network Connections panel # if you have more than one. On XP SP2, # you may need to disable the firewall # for the TAP adapter. ;dev-node MyTap # Are we connecting to a TCP or # UDP server? Use the same setting as # on the server. ;proto tcp proto udp # The hostname/IP and port of the server. # You can have multiple remote entries # to load balance between the servers. remote ТУТ_IP_АДРЕС_СЕРВЕРА 1194 ;remote my-server-2 1194 # Choose a random host from the remote # list for load-balancing. Otherwise # try hosts in the order specified. ;remote-random # Keep trying indefinitely to resolve the # host name of the OpenVPN server. Very useful # on machines which are not permanently connected # to the internet such as laptops. resolv-retry infinite # Most clients don't need to bind to # a specific local port number. nobind # Downgrade privileges after initialization (non-Windows only) ;user nobody ;group nogroup # Try to preserve some state across restarts. persist-key persist-tun # If you are connecting through an # HTTP proxy to reach the actual OpenVPN # server, put the proxy server/IP and # port number here. See the man page # if your proxy server requires # authentication. ;http-proxy-retry # retry on connection failures ;http-proxy [proxy server] [proxy port #] # Wireless networks often produce a lot # of duplicate packets. Set this flag # to silence duplicate packet warnings. ;mute-replay-warnings # SSL/TLS parms. # See the server config file for more # description. It's best to use # a separate .crt/.key file pair # for each client. A single ca # file can be used for all clients. ca ca.crt cert clientname.crt key clientname.key # Verify server certificate by checking # that the certicate has the nsCertType # field set to "server". This is an # important precaution to protect against # a potential attack discussed here: # http://openvpn.net/howto.html#mitm # # To use this feature, you will need to generate # your server certificates with the nsCertType # field set to "server". The build-key-server # script in the easy-rsa folder will do this. ns-cert-type server # If a tls-auth key is used on the server # then every client must also have the key. ;tls-auth ta.key 1 # Select a cryptographic cipher. # If the cipher option is used on the server # then you must also specify it here. ;cipher x # Enable compression on the VPN link. # Don't enable this unless it is also # enabled in the server config file. comp-lzo # Set log file verbosity. verb 3 # Silence repeating messages ;mute 20
запускаем клиент:
sudo openvpn --config clientname.conf
после этого мнстный провайдер видит только соединение с нашим серверром, а весь доступ в интернет идет через внешний сервер по защищенному каналу.
Не работает! с клиента Trace до шлюза (10.8.0.1)... дальше БОЛТ!
ОтветитьУдалитьiptables и ip_forward параметр настроен верно? или что у вас конкретно не работает?
Удалить