6.11.2016

Kişisel bir VPN sunucunuz olsun mu? Bence olsun!

Merhaba,

Malum ülkemizde internet erişiminin ne kadar süreyle hangi adresler için kesileceği pek belli olmuyor. Bu erişim engelleme işlemi sırasında kurunun yanında yaşta yanıyor tabi. Örneğin geçenlerde gitub ve dropbox'a erişimin engellenmesi bir çok meslektaşımı zor durumda bırakmış ancak VPN hizmetleri ile sorun derinleşmeden ilgili kaynaklara yeniden erişebilir hale gelmiştik. Şimdi yayınlanan bazı haberler tanınmış VPN hizmetleri ile ilgili olarakda erişim engelleme yapıldığı yönünde. Şu anda kontrol ettiğimde ben de ZenMate üzerinden erişim sağlayamıyorum mesela.

Bu durum için ise alternatif bir çözüm kendi OpenVPN sunucunuzu kurup, onun üzerinden erişim sağlamak. Bunun için yurt dışındaki hizmet sağlayıcılardan birinden bir vps kiralayabilir trafiğinizi bu openVpn sunucusu üzerinden yönlendirebilirsiniz. Örneğin Digital Ocean tarafından sağlanan portletler işinizi görecektir. Şu linke tıklayarak ayda 5 dolarlık bir portlet oluşturup kişisel openVpn sunucunuzu kurabilirsiniz. Bu sadece bir seçenek tabi pek çok fiyat ve özellikte barındırma hizmeti dünyanın her tarafından sağlanıyor isteğinizi seçip aynı yolu izleyerek sonuca ulaşabilirsiniz. Bu linki kullanırsanız referral olarak ben credit kazanmış olacağım :).  Ayrıca sizde 10 doarlık bir credit kazanmış olacaksınız.

Ben bundan sonrasını digital Ocean üzerinden anlatıyorum ama kurduğunuz işletim sistemi Ubuntu 16.04 olduğu sürece adımların pek değişeceğini sanmıyorum.

Öncelikle Ubuntu 16.04 yüklü bir portlet oluşturun. Digital Ocean sanal sunucunuz için pek çok lokasyon sağlıyor. Ben Amerika yerine avrupada bir lokasyon seçmenizi öneririm.

Portletinizi oluşturduktan sonra size sunucunuzun root kullanıcısının şifresi eposta ile gelecek. İster dashboarddaki web consolunu kullanarak isterseniz putty gibi bir SSH client kullanarak sanal sunucunuzda oturum açın. İlk giriş sırasında şifrenizi değiştirmeniz istenecek. Daha sonra aşağıdaki adımları takip edin. Ayrıca bu yazıya örnek olan orjinal tutoriala da isterseniz bu linkten ulaşabilirsiniz.



Önce openVpn kurulumunu yapın.

sudo apt-get update
sudo apt-get install openvpn easy-rsa

Sonra CA klasörünüz oluşturun

make-cadir ~/openvpn-ca
cd ~/openvpn-ca

Daha sonra CA tarafından kullanılacak değişkenlerin tutulduğu dosyayı düzenleyin

nano vars

Açtığınız dosyanın içinde kırmızı kısımları değiştirmelisiniz. (Aslına bakarsanız değiştirmesenizde sunucunuz çalışacaktır.)

. . .

export KEY_COUNTRY="US"
export KEY_PROVINCE="NY"
export KEY_CITY="New York City"
export KEY_ORG="DigitalOcean"
export KEY_EMAIL="admin@example.com"
export KEY_OU="Community"

. . .
Aynı dosyanın içinde sunucunuzun adını belirlemelisiniz burada 'server' olarak belirlenecek. Farklı bir isim seçerseniz bütün komutlarda ve dosyalarda seçtiğiniz ismi kullanmalısınız.
export KEY_NAME="server"
Sırada CA yapılandırma işi var

cd ~/openvpn-ca
source vars
./clean-all
./build-ca

Key ve şifreleme dosyalarını oluşturun

./build-key-server server

Tüm sorulanlara enter deyin ve son iki soruya da yes ile cevap verin.

./build-dh
openvpn --genkey --secret keys/ta.key

İstemci için sertifika anahtar çiftini oluşturun

cd ~/openvpn-ca
source vars
./build-key client1
OpenVpn servisini ayarlayın

cd ~/openvpn-ca/keys
sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openvpn
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf

Sunucu ayar dosyasını açıp aşağıdaki değişiklikleri yapın. Bu satırlardan dosyada bulunanların önünde yer alan noktalı virgülü kaldırmalı olmayanları da eklemelisiniz

sudo nano /etc/openvpn/server.conf
tls-auth ta.key 0 # This file is secret
key-direction 0
cipher AES-128-CBC
auth SHA256
user nobody
group nogroup
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
eğer sunucu adını farklı seçtiyseniz crt ve key dosyaları için doğru isimleri girdiğinizden emin olun.
cert server.crt
key server.key
artık dosyayı kaydedip kapatabilirsiniz.

IP yönlendirmeye izin vermelisiniz

sudo nano /etc/sysctl.conf
net.ipv4.ip_forward=1
UFW üzerinde izinler vermelisiniz

sudo nano /etc/ufw/before.rules


#
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
#   ufw-before-input
#   ufw-before-output
#   ufw-before-forward
#

# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0] 
# Allow traffic from OpenVPN client to eth0
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES

# Don't delete these required lines, otherwise there will be errors
*filter
. . .
dosyayı kaydedip kapatabilirsiniz.

UFW ile ilgili bir diğer ayar için:

sudo nano /etc/default/ufw
DEFAULT_FORWARD_POLICY="ACCEPT"
değişikliğin ardından dosyayı kaydedip kapatın.

sudo ufw allow 1194/udp
sudo ufw allow OpenSSH
sudo ufw disable
sudo ufw enable

sudo systemctl start openvpn@server
sudo systemctl enable openvpn@server

Client config dosyasını oluşturmak için

mkdir -p ~/client-configs/files
chmod 700 ~/client-configs/files
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
nano ~/client-configs/base.conf

Açılan dosyanın içinde

. . .
# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote server_IP_address 1194
. . .
proto udp
# Downgrade privileges after initialization (non-Windows only)
user nobody
group nogroup
# 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 client.crt
#key client.key
cipher AES-128-CBC
auth SHA256
key-direction 1
Dosyayı kaydedip çıktıktan sonra aşağıdaki komut ile yeni bir dosya oluşturun

nano ~/client-configs/make_config.sh

#!/bin/bash

# First argument: Client identifier

KEY_DIR=~/openvpn-ca/keys
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/client-configs/base.conf

cat ${BASE_CONFIG} \
    <(echo -e '') \
    ${KEY_DIR}/ca.crt \
    <(echo -e '\n') \
    ${KEY_DIR}/${1}.crt \
    <(echo -e '\n') \
    ${KEY_DIR}/${1}.key \
    <(echo -e '\n') \
    ${KEY_DIR}/ta.key \
    <(echo -e '') \
    > ${OUTPUT_DIR}/${1}.ovpn
Dosyanın içeriğini yukarıdaki ile değiştirin
Dosyayı kaydedip kapatabilirsiniz.Sonra client config dosyasını aşağıdaki komutlarla oluşturabilirsiniz.

chmod 700 ~/client-configs/make_config.sh
cd ~/client-configs
./make_config.sh client1


Ve böylece sunucu tarafında işlemleri tamamladınız.

Openvpn clientı için oluşturduğumuz ayar dosyasını winScp kullanarak indirebilirsiniz.

Sonra bilgisayarınıza openVPN clientı kurmalısınız. Bunun için şu adresteki installerlardan sizin için uygun olanı kullanabilirsiniz.

Son olarakda indirdiğiniz ayar dosyasını (örneğin client1.ovpn) openVPN clientının kurulumundan sonra oluşan ayar klasörüne kopyalamalısınız. (Örneğin windows için bu yol C:\Program Files\OpenVPN\config şeklinde)

Bağlantıyı yaptıktan sonra www.whatismyip.com adresine bağlanarak ip adresinizi kontrol edebilirsiniz kullandığınız sanal sunucunun ip adresi görünüyor olmalı.

Kişisel VPN sunucunuz hayırlı olsun :)