Kurumsal ağa uzaktan bağlanmak, ev ofisinden şirkete güvenli tünel açmak ya da seyahatte halka açık WiFi üzerinden güvenli iletişim kurmak… Bunların hepsinin merkezinde iyi yapılandırılmış bir VPN istemcisi var. OpenVPN bu işin fiili standardı haline geleli epey zaman oldu, ama istemci tarafı yapılandırması hâlâ pek çok sysadmin’in kafasını karıştırıyor. Bu yazıda hem Windows hem Linux tarafında gerçek dünya senaryolarıyla OpenVPN istemci yapılandırmasını adım adım ele alacağız.
Temel Kavramlar ve Dosya Yapısı
OpenVPN istemcisi çalışmadan önce birkaç temel dosyaya ihtiyaç duyar. Bunları doğru anlarsanız sorun giderme süreçleriniz çok daha hızlı ilerler.
CA Sertifikası (ca.crt): VPN sunucusunun kimliğini doğrulamak için kullandığınız kök sertifika. Sunucuya körü körüne güvenmek yerine bu sertifika üzerinden güven zinciri kurulur.
İstemci Sertifikası (client.crt): Sizin kim olduğunuzu sunucuya kanıtlayan sertifika. Her kullanıcı için ayrı üretilmesi gerekir.
İstemci Özel Anahtarı (client.key): Sertifikanızla eşleşen özel anahtar. Bu dosya asla paylaşılmamalı, şifrelenmiş saklanmalı.
TLS Auth Anahtarı (ta.key): Paket doğrulama için kullanılan HMAC anahtarı. Her OpenVPN bağlantı isteğini imzalar, brute force ve DoS saldırılarına karşı ek katman sağlar.
Yapılandırma Dosyası (.ovpn veya .conf): Tüm bu parçaları bir araya getiren ana konfigurasyon dosyası.
Dosyalarınızı düzenli tutmak için Linux’ta şöyle bir yapı öneriyorum:
/etc/openvpn/client/
├── kurumsal-vpn/
│ ├── ca.crt
│ ├── client.crt
│ ├── client.key
│ ├── ta.key
│ └── kurumsal-vpn.conf
└── ev-vpn/
├── ca.crt
└── ev-vpn.conf
Linux Üzerinde OpenVPN İstemci Kurulumu
Paket Kurulumu
Dağıtımınıza göre kurulum komutu farklı:
# Debian/Ubuntu
sudo apt update && sudo apt install openvpn -y
# RHEL/CentOS/Fedora
sudo dnf install openvpn -y
# Arch Linux
sudo pacman -S openvpn
Kurulumdan sonra openvpn --version çıktısına bakın. 2.5.x ve üzeri sürümler için bazı direktifler değişti, bunu aklınızın bir köşesinde tutun.
Yapılandırma Dosyası Oluşturma
Gerçek bir senaryo üzerinden gidelim: Şirkette bir OpenVPN sunucusu var, UDP 1194 portunda çalışıyor ve tüm trafiği tünelden geçirmek istiyorsunuz.
# /etc/openvpn/client/kurumsal-vpn/kurumsal-vpn.conf
client
dev tun
proto udp
remote vpn.sirketiniz.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
# Sertifika dosyaları
ca /etc/openvpn/client/kurumsal-vpn/ca.crt
cert /etc/openvpn/client/kurumsal-vpn/client.crt
key /etc/openvpn/client/kurumsal-vpn/client.key
# TLS doğrulama
tls-auth /etc/openvpn/client/kurumsal-vpn/ta.key 1
# Şifreleme ayarları
cipher AES-256-GCM
auth SHA512
tls-version-min 1.2
# DNS leak koruması
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
# Log
verb 3
log-append /var/log/openvpn/kurumsal-vpn.log
Bu konfigurasyon dosyasındaki birkaç önemli noktaya dikkat çekmek istiyorum. script-security 2 direktifi OpenVPN’in harici script çalıştırmasına izin veriyor. update-resolv-conf script’i ise VPN bağlantısı kurulunca DNS sunucularını otomatik güncelliyor. Bu script Debian/Ubuntu’da genellikle /etc/openvpn/ altında hazır geliyor, RHEL tabanlı sistemlerde update-systemd-resolved kullanmanız gerekebilir.
Manuel Bağlantı ve Test
# Manuel olarak bağlan (ön plan)
sudo openvpn --config /etc/openvpn/client/kurumsal-vpn/kurumsal-vpn.conf
# Arkaplanda çalıştır
sudo openvpn --config /etc/openvpn/client/kurumsal-vpn/kurumsal-vpn.conf --daemon
# Bağlantıyı doğrula
ip route show
ip addr show tun0
curl ifconfig.me
Başarılı bir bağlantıdan sonra ip addr show tun0 çıktısında size VPN sunucusunun atadığı IP adresini görmelisiniz. curl ifconfig.me ise dış IP’nizin değişip değişmediğini gösterir, tam tünel yönlendirmesi yapıyorsanız artık VPN sunucusunun IP’si görünmeli.
Systemd ile Otomatik Başlatma
Makineyi her yeniden başlattığınızda VPN’in otomatik bağlanmasını istiyorsanız systemd servis dosyasını kullanın:
# Servisi etkinleştir ve başlat
sudo systemctl enable openvpn-client@kurumsal-vpn
sudo systemctl start openvpn-client@kurumsal-vpn
# Durumu kontrol et
sudo systemctl status openvpn-client@kurumsal-vpn
# Logları takip et
sudo journalctl -u openvpn-client@kurumsal-vpn -f
Burada @kurumsal-vpn kısmı /etc/openvpn/client/kurumsal-vpn.conf dosyasına işaret ediyor. Bu yüzden konfigurasyon dosyanızın adlandırması önemli, klasör içinde değil doğrudan /etc/openvpn/client/ altında .conf uzantılı olmalı systemd için.
NetworkManager ile Entegrasyon
Masaüstü Linux kullanıcısıysanız ya da GUI tercih ediyorsanız NetworkManager-openvpn eklentisi hayatınızı kolaylaştırır:
# Ubuntu/Debian
sudo apt install network-manager-openvpn network-manager-openvpn-gnome -y
# RHEL/Fedora
sudo dnf install NetworkManager-openvpn NetworkManager-openvpn-gnome -y
Kurulumdan sonra NetworkManager’a .ovpn dosyasını import edebilirsiniz. Komut satırından yapmak isterseniz:
# nmcli ile ovpn dosyasını import et
nmcli connection import type openvpn file /home/kullanici/kurumsal-vpn.ovpn
# Bağlantıyı başlat
nmcli connection up kurumsal-vpn
# Bağlantı listesini görüntüle
nmcli connection show
Windows Üzerinde OpenVPN İstemci Kurulumu
OpenVPN GUI Kurulumu
Windows için resmi OpenVPN GUI istemcisini [openvpn.net](https://openvpn.net/community-downloads/) adresinden indirin. Kurulum sırasında TAP/TUN sürücüsü otomatik yükleniyor, burada herhangi bir ek işlem yapmanıza gerek yok.
Kurulumdan sonra C:Program FilesOpenVPN dizin yapısı şöyle olur:
- bin: OpenVPN çalıştırılabilir dosyaları
- config: Yapılandırma dosyalarınızın yeri burası
- log: Bağlantı logları
- easy-rsa: Sertifika yönetimi (sunucu tarafı için)
Windows Yapılandırma Dosyası
.ovpn uzantılı dosyayı C:Program FilesOpenVPNconfig altına kopyalayın. Windows’ta aynı yapılandırma direktifleri geçerli ama dosya yollarını Windows formatında yazın:
# C:Program FilesOpenVPNconfigkurumsal-vpn.ovpn
client
dev tun
proto udp
remote vpn.sirketiniz.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
# Windows formatında dosya yolları
ca "C:\Program Files\OpenVPN\config\kurumsal-vpn\ca.crt"
cert "C:\Program Files\OpenVPN\config\kurumsal-vpn\client.crt"
key "C:\Program Files\OpenVPN\config\kurumsal-vpn\client.key"
tls-auth "C:\Program Files\OpenVPN\config\kurumsal-vpn\ta.key" 1
cipher AES-256-GCM
auth SHA512
tls-version-min 1.2
# Windows DNS çözümleme
block-outside-dns
# Verb seviyesi
verb 3
block-outside-dns direktifi Windows’a özgü bir özellik. VPN bağlantısı aktifken DNS sorgularının tünel dışına çıkmasını engeller. DNS leak koruması için kritik.
Inline Sertifika Yapılandırması
Kurumsal ortamlarda ya da kullanıcılara kolay dağıtım yapmak istediğinizde tüm sertifika ve anahtar içeriklerini tek bir .ovpn dosyasına gömebilirsiniz. Bu yöntemi hem Windows hem Linux’ta kullanabilirsiniz:
client
dev tun
proto udp
remote vpn.sirketiniz.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
cipher AES-256-GCM
auth SHA512
verb 3
<ca>
-----BEGIN CERTIFICATE-----
MIIBszCCAVmgAwIBAgIJAP4pP... (CA sertifika içeriği)
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
MIIBszCCAVmgAwIBAgIJAP5qQ... (istemci sertifika içeriği)
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BA... (özel anahtar içeriği)
-----END PRIVATE KEY-----
</key>
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
a1b2c3d4e5f6... (TLS auth anahtar içeriği)
-----END OpenVPN Static key V1-----
</tls-auth>
key-direction 1
Bu yaklaşım kullanıcılara tek dosya göndermek açısından pratik, ama dikkat: bu dosya içinde özel anahtar var, e-posta ile göndermekten kaçının ve güvenli transfer yöntemi kullanın.
Windows’ta Komut Satırından Bağlantı
GUI yerine PowerShell veya CMD tercih ediyorsanız:
# PowerShell veya CMD - Yönetici olarak çalıştırın
"C:Program FilesOpenVPNbinopenvpn.exe" --config "C:Program FilesOpenVPNconfigkurumsal-vpn.ovpn"
# Servis olarak çalıştır
sc start OpenVPNService
# Servis durumu
sc query OpenVPNService
Windows’ta OpenVPN GUI sistem tepsisinde çalışır ve sağ tıkladığınızda bağlantı seçeneklerine ulaşırsınız. Birden fazla .ovpn dosyanız varsa hepsi menüde ayrı ayrı görünür.
Kullanıcı Adı/Parola Kimlik Doğrulama
Sertifika yerine ya da sertifikaya ek olarak kullanıcı adı/parola kimlik doğrulaması yapılandırabilirsiniz. Özellikle LDAP/Active Directory entegrasyonu olan kurumsal ortamlarda yaygın:
# Konfigurasyon dosyasına ekle
auth-user-pass
# Veya otomatik giriş için parola dosyası kullan (güvenlik riskini göz önünde bulundurun)
auth-user-pass /etc/openvpn/client/credentials.txt
credentials.txt dosyasının ilk satırında kullanıcı adı, ikinci satırında parola olmalı:
# /etc/openvpn/client/credentials.txt
kullanici_adi
P@ssw0rd123
# Dosya izinlerini kısıtla
chmod 600 /etc/openvpn/client/credentials.txt
Bu dosyayı kök kullanıcıya ait ve sadece okunabilir yapın. Paylaşılan sistemlerde bu yöntemi kullanmaktan kaçının.
Gerçek Dünya Senaryosu: Split Tunneling
Tüm trafiği VPN üzerinden geçirmek yerine sadece kurumsal ağ trafiğini tünelden yönlendirmek isteyebilirsiniz. Buna split tunneling deniyor. Örneğin: sadece 10.0.0.0/8 ve 192.168.100.0/24 bloklarına VPN üzerinden erişmek, geri kalanı normal internet bağlantısından geçirmek gibi.
# Split tunnel konfigurasyon örneği
client
dev tun
proto udp
remote vpn.sirketiniz.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
tls-auth ta.key 1
cipher AES-256-GCM
auth SHA512
# Sunucunun default route push'unu reddet
pull-filter ignore "redirect-gateway"
pull-filter ignore "dhcp-option DNS"
# Manuel route ekle - sadece bu ağlar VPN üzerinden
route 10.0.0.0 255.0.0.0
route 192.168.100.0 255.255.255.0
verb 3
pull-filter ignore "redirect-gateway" direktifi sunucunun default route değiştirme komutunu görmezden gelmesini sağlar. Dikkatli kullanın: sunucu yöneticisi tüm trafiği tünelden geçirmek istiyorsa bu ayar politika ihlali sayılabilir.
Sorun Giderme
Deneyimlerime göre OpenVPN istemci sorunlarının büyük çoğunluğu birkaç kategoriye düşüyor. Sistematik yaklaşalım.
Log Analizi
# Linux - gerçek zamanlı log takibi
sudo tail -f /var/log/openvpn/kurumsal-vpn.log
# Daha ayrıntılı log için verb seviyesini artır (konfig dosyasında)
# verb 6
# journalctl ile systemd servisi logları
sudo journalctl -u openvpn-client@kurumsal-vpn --since "1 hour ago"
# Windows - log dosyası konumu
# C:Program FilesOpenVPNlogkurumsal-vpn.log
Yaygın Hatalar ve Çözümleri
TLS handshake failed hatası: Bu genellikle sertifika uyumsuzluğu ya da TLS versiyonu sorununu işaret eder.
# TLS versiyonu kısıtlamasını test için gevşet
# (Sadece test için, production'da kullanma)
tls-version-min 1.0
# Sertifika geçerliliğini kontrol et
openssl verify -CAfile ca.crt client.crt
openssl x509 -in client.crt -noout -dates
AUTH_FAILED hatası: Kullanıcı adı/parola yanlış ya da sertifika iptal listesinde (CRL) yer alıyor.
DNS çözümleme sorunları: VPN bağlandıktan sonra alan adları çözülemiyorsa:
# Mevcut DNS ayarlarını kontrol et
cat /etc/resolv.conf
resolvectl status
# DNS leak testi
dig +short myip.opendns.com @resolver1.opendns.com
Bağlantı drop oluyorsa: Keepalive ayarlarını ve firewall’ı kontrol edin.
# Konfigurasyon dosyasına ekle
keepalive 10 120
# Her 10 saniyede ping, 120 saniyede cevap gelmezse yeniden bağlan
Bağlantı Testi Script’i
Bağlantıyı otomatik test etmek ve sorun varsa yeniden başlatmak için basit bir script:
#!/bin/bash
# /usr/local/bin/vpn-check.sh
VPN_HOST="10.8.0.1" # VPN sunucusunun tünel IP'si
LOG_FILE="/var/log/vpn-monitor.log"
SERVICE_NAME="openvpn-client@kurumsal-vpn"
if ! ping -c 3 -W 5 "$VPN_HOST" > /dev/null 2>&1; then
echo "$(date): VPN bağlantısı koptu, yeniden başlatılıyor..." >> "$LOG_FILE"
systemctl restart "$SERVICE_NAME"
sleep 30
if ping -c 3 -W 5 "$VPN_HOST" > /dev/null 2>&1; then
echo "$(date): VPN başarıyla yeniden bağlandı." >> "$LOG_FILE"
else
echo "$(date): VPN yeniden bağlanamadı! Müdahale gerekiyor." >> "$LOG_FILE"
fi
else
echo "$(date): VPN bağlantısı normal." >> "$LOG_FILE"
fi
Bu script’i cron’a ekleyerek her 5 dakikada bir çalıştırabilirsiniz:
chmod +x /usr/local/bin/vpn-check.sh
# Crontab'a ekle
echo "*/5 * * * * root /usr/local/bin/vpn-check.sh" | sudo tee /etc/cron.d/vpn-monitor
Güvenlik Sıkılaştırma Önerileri
Temel bağlantıyı kurduğunuzda işin bitmediğini unutmayın. Birkaç kritik güvenlik adımı:
Özel anahtar koruması: Linux’ta .key dosyalarının izinleri 600 olmalı, sahibi root veya ilgili servis kullanıcısı olmalı.
sudo chmod 600 /etc/openvpn/client/kurumsal-vpn/client.key
sudo chown root:root /etc/openvpn/client/kurumsal-vpn/client.key
Şifre korumalı özel anahtar: Özellikle taşınabilir cihazlarda özel anahtarı şifreli tutmak ek koruma sağlar:
# Mevcut anahtara parola ekle
openssl rsa -aes256 -in client.key -out client-encrypted.key
Bu durumda her VPN bağlantısında parola girmeniz gerekir, ancak cihaz çalınırsa anahtarınız korunur.
TLS 1.3 kullanımı: OpenVPN 2.5+ sürümlerinde TLS 1.3 desteği var:
# Konfigurasyon dosyasına ekle
tls-version-min 1.3
Güvenli şifre süitleri: Eski ve zayıf şifreleme algoritmalarını devre dışı bırakın:
tls-cipher TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384
cipher AES-256-GCM
auth SHA512
Çoklu Profil Yönetimi
Hem kurumsal hem kişisel VPN bağlantılarını yönetiyorsanız, Linux’ta basit bir sarmalayıcı script işinizi kolaylaştırır:
#!/bin/bash
# /usr/local/bin/vpn
ACTION=$1
PROFILE=$2
case $ACTION in
start)
sudo systemctl start "openvpn-client@$PROFILE"
echo "$PROFILE VPN başlatıldı"
;;
stop)
sudo systemctl stop "openvpn-client@$PROFILE"
echo "$PROFILE VPN durduruldu"
;;
status)
sudo systemctl status "openvpn-client@$PROFILE"
;;
list)
ls /etc/openvpn/client/*.conf | xargs -I{} basename {} .conf
;;
*)
echo "Kullanim: vpn [start|stop|status|list] [profil_adi]"
;;
esac
Sonuç
OpenVPN istemci yapılandırması ilk bakışta karmaşık görünebilir, ama temel mantığı kavradıktan sonra hem Windows hem Linux tarafında hızla ilerleyebilirsiniz. Bu yazıda ele aldığımız konuları özetleyecek olursak: sertifika tabanlı ve kullanıcı adı/parola kimlik doğrulama, tam tünel ve split tunnel modları, systemd servisi ve NetworkManager entegrasyonu, otomatik yeniden bağlantı ve izleme scriptleri, güvenlik sıkılaştırma adımları.
Kurumsal ortamda çalışıyorsanız birkaç ek öneri: Sertifika dağıtımını otomatize edin ve merkezi yönetin, kullanıcı bazında sertifika iptali için CRL mekanizmasını kurun, istemci günlüklerini merkezi log sistemine taşıyın ve anormal bağlantı davranışlarını izleyin.
En çok karşılaştığım sahte acil durum şu: “VPN çalışmıyor!” diye arıyorlar, bakıyorsunuz sertifika tarihi geçmiş. Bunu önlemek için sertifika bitiş tarihlerini bir monitoring aracıyla takip edin ve 30 gün kala uyarı alın. Basit ama hayat kurtarıcı.
OpenVPN konusundaki diğer yazılarda sunucu tarafı yapılandırması, PKI yönetimi ve yüksek erişilebilirlik kurulumlarını ele alacağız.