İki ofis arasında güvenli bir tünel kurmak, küçük ve orta ölçekli işletmelerin en sık ihtiyaç duyduğu şeylerden biri. Pahalı donanım VPN çözümlerine gerek kalmadan, OpenVPN ile bu işi hem güvenli hem de esnek bir şekilde halledebilirsiniz. Bu yazıda gerçek bir senaryo üzerinden, iki farklı lokasyonu birbirine bağlayan site-to-site VPN kurulumunu adım adım anlatacağım.
Senaryo ve Ağ Topolojisi
Diyelim ki İstanbul’daki merkez ofis ile Ankara’daki şube ofisi arasında güvenli bir bağlantı kurmamız gerekiyor. İki lokasyonda da Linux sunucular var ve bu sunucular her iki taraftaki ağ geçidi görevi görecek.
Kurulumda kullanacağımız adres planı şöyle:
- İstanbul (Merkez) – Server: Genel IP: 203.0.113.10 / Yerel ağ: 192.168.1.0/24
- Ankara (Şube) – Client: Genel IP: 203.0.113.20 / Yerel ağ: 192.168.2.0/24
- VPN Tünel Ağı: 10.8.0.0/30
Bu yapıda İstanbul sunucusu OpenVPN server olarak çalışacak, Ankara sunucusu ise client olarak bağlanacak. Bağlantı kurulduktan sonra İstanbul’daki bir bilgisayar 192.168.2.x adreslerine, Ankara’daki bir bilgisayar da 192.168.1.x adreslerine doğrudan erişebilecek.
OpenVPN Kurulumu
Her iki sunucuya da OpenVPN yükleyerek başlıyoruz. Ubuntu/Debian tabanlı sistemler için:
# Her iki sunucuda da çalıştırın
sudo apt update && sudo apt upgrade -y
sudo apt install openvpn easy-rsa -y
# Kurulumu doğrulayalım
openvpn --version
CentOS/RHEL tabanlı sistemlerde:
sudo dnf install epel-release -y
sudo dnf install openvpn easy-rsa -y
PKI Altyapısı ve Sertifika Üretimi
Site-to-site VPN’de en kritik kısım sertifika yönetimi. Easy-RSA ile kendi CA’mızı (Certificate Authority) oluşturarak hem server hem de client sertifikalarını üreteceğiz. Bu işlemleri sadece İstanbul sunucusunda yapacağız.
# Easy-RSA dizinini oluşturalım
mkdir ~/easy-rsa
ln -s /usr/share/easy-rsa/* ~/easy-rsa/
cd ~/easy-rsa
# PKI'yi başlatalım
./easyrsa init-pki
# CA sertifikasını oluşturalım (şifre sorduğunda güçlü bir şifre girin)
./easyrsa build-ca
# Server sertifikası ve anahtarı oluşturalım
./easyrsa gen-req istanbul-server nopass
./easyrsa sign-req server istanbul-server
# Client (Ankara şubesi) sertifikası oluşturalım
./easyrsa gen-req ankara-client nopass
./easyrsa sign-req client ankara-client
# Diffie-Hellman parametrelerini oluşturalım (biraz zaman alabilir)
./easyrsa gen-dh
# TLS-Auth anahtarı oluşturalım (ek güvenlik katmanı)
openvpn --genkey secret ~/easy-rsa/pki/ta.key
build-ca komutunu çalıştırırken size bir Common Name soracak. Burada organizasyonunuzu tanımlayan bir isim girin, mesela “Sirket-CA”. Bu CA sertifikası tüm diğer sertifikaları imzalayacak, bu yüzden ca.key dosyasını çok iyi koruyun.
Sertifikaları doğru konuma kopyalayalım:
# Server dosyalarını OpenVPN dizinine taşıyalım
sudo cp ~/easy-rsa/pki/ca.crt /etc/openvpn/server/
sudo cp ~/easy-rsa/pki/issued/istanbul-server.crt /etc/openvpn/server/
sudo cp ~/easy-rsa/pki/private/istanbul-server.key /etc/openvpn/server/
sudo cp ~/easy-rsa/pki/dh.pem /etc/openvpn/server/
sudo cp ~/easy-rsa/pki/ta.key /etc/openvpn/server/
# Dosya izinlerini ayarlayalım
sudo chmod 600 /etc/openvpn/server/istanbul-server.key
sudo chmod 600 /etc/openvpn/server/ta.key
Ankara sunucusuna gönderilecek dosyaları da hazırlayalım:
# Ankara için gerekli dosyaları bir dizine toplayalım
mkdir ~/ankara-files
cp ~/easy-rsa/pki/ca.crt ~/ankara-files/
cp ~/easy-rsa/pki/issued/ankara-client.crt ~/ankara-files/
cp ~/easy-rsa/pki/private/ankara-client.key ~/ankara-files/
cp ~/easy-rsa/pki/ta.key ~/ankara-files/
# SCP ile Ankara sunucusuna gönderelim (güvenli ağ üzerinden yapın bunu)
scp ~/ankara-files/* [email protected]:/tmp/ankara-vpn/
İstanbul Sunucusu – Server Yapılandırması
Şimdi OpenVPN server konfigürasyon dosyasını oluşturalım:
sudo nano /etc/openvpn/server/site-to-site.conf
Dosyanın içeriği şöyle olmalı:
# Temel ayarlar
port 1194
proto udp
dev tun
# Sertifika dosyaları
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/istanbul-server.crt
key /etc/openvpn/server/istanbul-server.key
dh /etc/openvpn/server/dh.pem
tls-auth /etc/openvpn/server/ta.key 0
# VPN tünel ağı
server 10.8.0.0 255.255.255.252
# Şifreleme ayarları
cipher AES-256-GCM
auth SHA256
tls-version-min 1.2
# Karşı tarafa Ankara ağını duyur
push "route 192.168.1.0 255.255.255.0"
# Ankara ağı için route tanımla
route 192.168.2.0 255.255.255.0
# Client-config-dir ile Ankara'ya özel ayarlar
client-config-dir /etc/openvpn/ccd
# Log ayarları
log-append /var/log/openvpn/site-to-site.log
verb 3
status /var/log/openvpn/openvpn-status.log 30
# Bağlantı kararlılığı
keepalive 10 120
persist-key
persist-tun
# Güvenlik
user nobody
group nogroup
Client config dizinini ve Ankara’ya özel route ayarını yapalım:
sudo mkdir -p /etc/openvpn/ccd
sudo nano /etc/openvpn/ccd/ankara-client
Bu dosyaya şunu yazın:
# Ankara client'ına sabit IP ver ve onun ağını tanımla
ifconfig-push 10.8.0.2 10.8.0.1
iroute 192.168.2.0 255.255.255.0
Log dizinini oluşturup servisi başlatalım:
sudo mkdir -p /var/log/openvpn
sudo systemctl enable openvpn-server@site-to-site
sudo systemctl start openvpn-server@site-to-site
sudo systemctl status openvpn-server@site-to-site
IP Forwarding ve Firewall Ayarları
VPN tüneli üzerinden trafiğin yönlendirilebilmesi için IP forwarding’i etkinleştirmeniz şart. Bu adımı atlamak en sık yapılan hatalardan biri.
# İstanbul sunucusunda IP forwarding aktif edelim
sudo nano /etc/sysctl.conf
# Şu satırı ekleyin veya uncomment yapın:
# net.ipv4.ip_forward = 1
# Değişikliği hemen uygulayalım
sudo sysctl -p
# Doğrulayalım
cat /proc/sys/net/ipv4/ip_forward
# Çıktı 1 olmalı
Firewall kurallarını da ayarlayalım. UFW kullanıyorsanız:
# OpenVPN portuna izin ver
sudo ufw allow 1194/udp
# Tünel arayüzünden gelen trafiğe izin ver
sudo ufw allow in on tun0
sudo ufw allow out on tun0
# UFW forward policy'yi değiştir
sudo nano /etc/default/ufw
# DEFAULT_FORWARD_POLICY="ACCEPT" olarak değiştirin
# NAT kurallarını ekle
sudo nano /etc/ufw/before.rules
before.rules dosyasının en başına, *filter satırından önce şunu ekleyin:
# NAT tablosu - site-to-site VPN için
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/30 -o eth0 -j MASQUERADE
-A POSTROUTING -s 192.168.2.0/24 -o eth0 -j MASQUERADE
COMMIT
# UFW'yi yeniden yükle
sudo ufw disable && sudo ufw enable
iptables doğrudan kullanıyorsanız:
sudo iptables -A FORWARD -i tun0 -j ACCEPT
sudo iptables -A FORWARD -o tun0 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/30 -o eth0 -j MASQUERADE
sudo iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth0 -j MASQUERADE
# Kuralları kalıcı hale getir
sudo apt install iptables-persistent -y
sudo netfilter-persistent save
Ankara Sunucusu – Client Yapılandırması
İstanbul’dan gönderilen sertifika dosyalarını doğru konuma koyalım:
# Ankara sunucusunda
sudo mkdir -p /etc/openvpn/client
sudo mv /tmp/ankara-vpn/* /etc/openvpn/client/
sudo chmod 600 /etc/openvpn/client/ankara-client.key
sudo chmod 600 /etc/openvpn/client/ta.key
Şimdi client konfigürasyon dosyasını oluşturalım:
sudo nano /etc/openvpn/client/site-to-site.conf
# Client modu
client
dev tun
proto udp
# İstanbul sunucusunun genel IP'si ve portu
remote 203.0.113.10 1194
# Sertifika dosyaları
ca /etc/openvpn/client/ca.crt
cert /etc/openvpn/client/ankara-client.crt
key /etc/openvpn/client/ankara-client.key
tls-auth /etc/openvpn/client/ta.key 1
# Şifreleme - server ile aynı olmalı
cipher AES-256-GCM
auth SHA256
tls-version-min 1.2
# İstanbul ağına route ekle
route 192.168.1.0 255.255.255.0
# Log ayarları
log-append /var/log/openvpn/site-to-site.log
verb 3
# Bağlantı kararlılığı
keepalive 10 120
persist-key
persist-tun
resolv-retry infinite
nobind
# Güvenlik
user nobody
group nogroup
Ankara sunucusunda da IP forwarding ve firewall ayarlarını yapın:
# IP forwarding
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
# Firewall
sudo ufw allow in on tun0
sudo ufw allow out on tun0
# iptables forward kuralları
sudo iptables -A FORWARD -i tun0 -j ACCEPT
sudo iptables -A FORWARD -o tun0 -j ACCEPT
sudo netfilter-persistent save
# Servisi başlat
sudo mkdir -p /var/log/openvpn
sudo systemctl enable openvpn-client@site-to-site
sudo systemctl start openvpn-client@site-to-site
Bağlantı Testi ve Sorun Giderme
Her şeyi ayarladıktan sonra bağlantıyı doğrulamanın zamanı geldi. Önce temel testleri yapalım:
# İstanbul sunucusunda VPN arayüzünü kontrol et
ip addr show tun0
ip route show
# VPN tünel IP'sine ping at
ping -c 4 10.8.0.2
# Ankara'nın yerel ağına ping at
ping -c 4 192.168.2.1
# Ankara tarafından İstanbul ağına ping
ping -c 4 192.168.1.1
# Aktif bağlantıları izle
sudo tail -f /var/log/openvpn/site-to-site.log
# OpenVPN status dosyasına bak
sudo cat /var/log/openvpn/openvpn-status.log
Sık karşılaşılan sorunlar ve çözümleri:
- TLS handshake timeout:
ta.keyyönünü kontrol edin. Server’da0, client’ta1olmalı. - Route eklenmedi: Client-config-dir’deki
irouteve ana configdekiroutesatırlarının ikisinin de olduğundan emin olun. - Ping gidiyor ama dönmüyor: Her iki sunucudaki yerel ağ cihazlarının gateway ayarlarını kontrol edin. VPN gateway olarak sunucu IP’si tanımlı olmalı.
- Permission denied hataları: Sertifika dosyalarının izinlerini ve
nobodykullanıcısının dosyalara erişebildiğini kontrol edin.
Şube Ağı için Default Gateway Yönlendirmesi
Ankara şubesindeki kullanıcıların VPN üzerinden İstanbul’daki sunuculara erişebilmesi için şube ağındaki cihazların gateway’ini doğru ayarlamanız gerekiyor. Şube ağındaki router veya switch’in yönlendirme tablosuna şu route’u ekleyin:
# Şube ağındaki router'a eklenecek static route (örnek)
# 192.168.1.0/24 hedef ağı için gateway: 192.168.2.1 (Ankara VPN sunucusu)
ip route add 192.168.1.0/24 via 192.168.2.1
# Bu komutu şube router'ında kalıcı hale getirmek için
# /etc/network/interfaces veya netplan yapılandırmasına ekleyin
Otomatik Yeniden Bağlantı ve İzleme
Üretim ortamında bağlantının kesilmesi durumunda otomatik yeniden bağlanma kritik. OpenVPN bunu büyük ölçüde kendi hallediyor ama ek bir izleme scripti işinize yarayabilir:
# /usr/local/bin/vpn-monitor.sh
#!/bin/bash
VPN_IP="10.8.0.2"
LOG_FILE="/var/log/vpn-monitor.log"
if ! ping -c 3 -W 5 $VPN_IP > /dev/null 2>&1; then
echo "$(date): VPN bağlantısı kesildi, yeniden başlatılıyor..." >> $LOG_FILE
systemctl restart openvpn-server@site-to-site
sleep 10
if ping -c 3 -W 5 $VPN_IP > /dev/null 2>&1; then
echo "$(date): VPN başarıyla yeniden bağlandı." >> $LOG_FILE
else
echo "$(date): VPN yeniden bağlanamadı! Manuel müdahale gerekli." >> $LOG_FILE
# Mail bildirimi ekleyebilirsiniz
# mail -s "VPN Alarmi" [email protected] <<< "VPN baglantisi kesildi!"
fi
fi
# Scripte çalıştırma izni ver ve cron'a ekle
sudo chmod +x /usr/local/bin/vpn-monitor.sh
# Her 5 dakikada bir kontrol et
sudo crontab -e
# Şunu ekle:
# */5 * * * * /usr/local/bin/vpn-monitor.sh
Sertifika Yenileme ve Bakım
Easy-RSA ile üretilen sertifikaların varsayılan geçerlilik süresi 825 gündür. Sertifika sona erme tarihini kontrol etmek için:
# Sertifika geçerlilik süresini kontrol et
openssl x509 -in /etc/openvpn/server/istanbul-server.crt -noout -dates
# Tüm sertifikaları listele
cd ~/easy-rsa
./easyrsa show-cert istanbul-server
./easyrsa show-cert ankara-client
# Gerekirse sertifikayı yenile
./easyrsa renew ankara-client
Bir sertifikayı iptal etmeniz gerekirse (mesela bir şube sunucusu değiştiğinde):
cd ~/easy-rsa
./easyrsa revoke ankara-client
./easyrsa gen-crl
# CRL dosyasını OpenVPN'e tanıt
sudo cp ~/easy-rsa/pki/crl.pem /etc/openvpn/server/
# server config'e şunu ekleyin: crl-verify /etc/openvpn/server/crl.pem
sudo systemctl restart openvpn-server@site-to-site
Performans Optimizasyonu
Yüksek trafik bekliyorsanız birkaç ayarla performansı artırabilirsiniz:
sndbuf 0vercvbuf 0: Kernel’in buffer boyutunu otomatik ayarlamasına izin verir.txqueuelen 1000: TUN arayüzünün kuyruk uzunluğunu artırır.compress lz4-v2: Sıkıştırma ekler ancak CPU kullanımını artırır, test edin.fast-io: Gönderme/alma işlemlerini optimize eder.- UDP tercih edin: TCP üzerinden OpenVPN çalıştırmak performans sorunlarına yol açar, zorunlu olmadıkça UDP kullanın.
Bağlantı kalitesini ölçmek için:
# VPN tünel üzerinden bant genişliği testi
# Her iki sunucuda iperf3 yükleyin
sudo apt install iperf3 -y
# İstanbul'da server olarak çalıştır
iperf3 -s
# Ankara'dan test et
iperf3 -c 10.8.0.1 -t 30 -P 4
Sonuç
OpenVPN ile site-to-site VPN kurmak ilk bakışta karmaşık görünebilir ama adımları sırayla takip ettiğinizde oldukça yönetilebilir bir yapı ortaya çıkıyor. Burada anlattığım kurulum enterprise düzeyde bir güvenlik sağlıyor: AES-256-GCM şifreleme, TLS auth ile ek koruma katmanı ve sertifika tabanlı kimlik doğrulama. Yıllık birkaç bin dolar ödenecek donanım VPN çözümlerinin yerine bu yapı, küçük ve orta ölçekli işletmelerin bütçesine çok daha uygun bir alternatif sunuyor.
En kritik noktaları bir kez daha vurgulayayım: sertifika dosyalarını güvenli kanaldan transfer edin, ca.key dosyasını asla sunucuda bırakmayın, IP forwarding’i her iki tarafta da aktif etmeyi unutmayın ve sertifika sona erme tarihlerini takviminize ekleyin. Bunları doğru yaparsanız aylar boyunca sorunsuz çalışan bir VPN altyapısına sahip olursunuz.