macOS’ta OpenVPN NAT Paylaşımı: Parallels VM İçin Tam Çözüm
Bilişim Profesyonelleri olan meslektaşlarımız için arşivlik bir içerik olması temennisi ile..
Değerli Bilişim Profesyonelleri Değerli Okuyucularımız..
Bir önceki makalemizde aşağıdaki konular için bir Teknik doküman hazırlanması konusuna değinmiş ve aşağıdaki açıklamalarda bulunarak bir makale hazırlamıştık. Bu yazımız daha çok teknik içerikte olacaktır. Hazırladığımız teknik makalenin Faydalı olması temennisi ile iyi okumalar..
Saha deneyimlerinde sık karşılaşılan bu problem, geçtiğimiz haftalarda bir meslektaşımızın yaşadığı gerçek bir senaryo üzerine gündeme geldi. macOS işletim sistemi üzerinde OpenVPN bağlantısı sağlanmış, aynı sistem içerisinde Parallels Desktop ile çalışan Windows sanal makinenin ise bu VPN tünelinden geçen rotalara erişemediği tespit edildi. VPN bağlantısının yalnızca macOS seviyesinde aktif olması, Windows VM’e yönlendirme yapılmaması sebebiyle ilgili ağlara ulaşım sağlanamıyordu.
Bu sorunun çözümü için pfctl NAT yapılandırması, IP forwarding ve launchd ile otomasyon scriptleri kullanılarak etkili bir yöntem geliştirildi. Sadece OpenVPN bağlantısını paylaşmakla kalmayan bu yapı, aynı zamanda VPN bağlantısı açıldığında sistemi otomatik kontrol eden ve NAT işlemini başlatan dinamik bir sistem haline getirildi.
Bu makalede, yaşanan bu gerçek senaryonun detayları, uygulanan çözüm adımları ve tüm script dosyaları adım adım okuyucularımızla paylaşılmıştır. Benzer yapı kullanan sistem yöneticileri ve bilişim profesyonelleri için kaynak niteliğinde olacak bu çalışmayı sizlerle paylaşıyoruz. Sahada VPN yapılandırması yapan Bilişim Profesyonelleri olan meslektaşlarımız için arşivlik bir içerik olması temennisi ile..
Keyifli okumalar.
Saygılarımla
Osman SELÇOK – Genel Yayın Yönetmeni
bilişim Profesyonelleri Haber Sitesi www.bp.tr
ÖNEMLİ NOT: Burada yazılanlar bilgilendirme amacıyla hazırlanmış olup, okuyucularımızı bu konuda neler yapmaları konusunda fikir vermesi düşünülerek hazırlanmıştır. Burada Yazılanlar yeni teknolojilerin gelişmesi ve koşulların değişmesinden dolayı Gerçek Ugyulamalardan Farklı Olabilir. Bu nedenle bir işlem yapmadan önce ve sistemlerinizde bir sorun yaşamamak adına konunun uzmanlarından destek almayı unutmayın!
🎯 Teknik Makalemizin Önerilen Konu Başlıklar:
🎛️ Teknik ve Net:
- macOS Üzerinde OpenVPN NAT Paylaşımı Nasıl Yapılır?
- OpenVPN Tünelini Parallels Windows VM ile Paylaştırma Yöntemi
- macOS’ta VPN Bağlantısını Parallels VM Üzerinden Kullanmanın En Pratik Yolu
- OpenVPN NAT ve Otomasyon Ayarı: Parallels VM İçin Uygulamalı Rehber
- macOS’ta VPN Bağlantısını Windows VM’e Paylaştırma Çözümü
- macOS’ta OpenVPN NAT Paylaşımı: Parallels VM İçin Tam Çözüm
📈 SEO ve Arama Motoru Odaklı:
- macOS OpenVPN NAT Paylaşımı ve Parallels Windows VPN Erişimi
- OpenVPN Bağlantısını Parallels VM’e Aktarma Çözümü
- VPN Tünelini Parallels VM’de Kullanmanın Kolay Yolu
- macOS Üzerinde OpenVPN NAT Yapılandırması ve Otomatik Yönetim
- macOS Üzerinde OpenVPN NAT Paylaşımı ve Parallels VM Çözümü
- macOS OpenVPN NAT ve Otomasyon Rehberi
📢 Dikkat Çekici ve Etkileşim Odaklı:
- OpenVPN Tünelini Parallels VM’e Paylaştırmanın Kolay Yolu!
- macOS Kullanıcıları İçin VPN NAT ve Parallels Çözümü
- VPN Rotaları Windows VM’de Görünsün: İşte Yöntemi
- macOS Üzerinde OpenVPN NAT ve Parallels Bağlantısı Tek Scriptle!
- OpenVPN Tünelini Parallels VM’e Yönlendirme Yöntemi
- macOS’ta OpenVPN NAT Paylaşımı ve Otomatik Yönlendirme Çözümü
Bu kadar alternatif arasından siz hangi başlığı tercih ederdiniz? Biz seçmekte olabildiğince zorlandık ama en nihayetinde aşağıdaki başlıkta karar kıldık.
OpenVPN Bağlantısını Parallels VM ile Paylaşmanın Pratik Yolu
Bu teknik makalemizin başlangıcında sorulan o teknik soru. Biz bu soruyla beraber chatgpt’ye sorduk ve ondan aşağıdaki bilgileri aldık.
“macos üzerinde opnvpn kullanıyorum. içerisinde paralles ile windows kurulu. macos’da openvpn ile gelen rotalara neden windows üzerinden erişemem? bunu paylaştırmak için bir ayar vs var mıdır?”
Harika bir soru, ve aslında sık karşılaşılan bir konfigürasyon meselesi. Sana bunu temel ağ yapısı üzerinden, ardından çözüm yöntemleriyle açıklayayım.
📌 Durum:
- macOS üzerinde OpenVPN client çalışıyor ve VPN ile belirli network’lere route ekleniyor.
- Parallels ile Windows VM aynı fiziksel Mac üzerinde çalışıyor.
- Windows VM, Mac’in network interface’ini kullanıyor (muhtemelen Shared Network ya da Bridged Network modlarından biri)
- Ancak MacOS’ta VPN ile gelen rotalar, Windows VM’den erişilemiyor.
📌 Neden?
Çünkü:
- OpenVPN MacOS üzerinde kurulduğunda, VPN üzerinden gelen rotalar ve tünel sadece MacOS seviyesinde işleniyor.
- Parallels VM, MacOS’un kendi ağ yönlendirme tablosundan haberdar değil. Mac’in VPN tünelini paylaşmadığı için, VM içerisindeki Windows bu tünelden geçen ağlara doğrudan erişemez.
📌 Çözüm Seçenekleri:
1️⃣ Parallels’ı Bridged Network moduna almak
Parallels’ın ağ ayarlarında:
Network Mode: Bridgedseçersen, Windows VM doğrudan kendi IP’sini alır ve sen aynı VPN bağlantısını Windows içerisine de kurabilirsin.
Avantaj:- Her iki sistem kendi VPN bağlantısını bağımsız yönetir.
- Windows doğrudan VPN ağına çıkabilir.
Dezavantaj:
- VPN sunucusu Mac ve Windows’tan iki ayrı bağlantı görecek.
2️⃣ MacOS’un VPN bağlantısını Windows VM’e paylaşmak (Internet Sharing / NAT Routing)
Bu biraz daha karmaşık ama mümkün:
- MacOS üzerinde OpenVPN bağlantısı açıldıktan sonra, MacOS’un internet paylaşımı özelliği ile bu VPN bağlantısını Windows VM’e yönlendirebilirsin.
Yapılacaklar:
System Preferences > Sharing > Internet Sharingbölümüne gir.- Share your connection from: kısmında VPN interface’ini (ör.
utun0veyatun0) seç. - To computers using: kısmında Parallels VM’in bağlı olduğu interface (genellikle
EthernetveyaWi-Fi) seç. - Internet Sharing’i başlat.
Windows VM ise gateway olarak MacOS’u (ör: 192.168.64.1 gibi) kullanmalı.
Avantaj:
- Windows VM VPN üzerinden internete ve VPN içindeki ağlara çıkabilir.
Dezavantaj:
- Karmaşık yapılandırma, elle NAT ve forwarding ayarı gerektirebilir.
3️⃣ macOS üzerinde packet forwarding ve NAT ayarları
Daha gelişmiş ve kalıcı çözüm:
- MacOS’ta IP forwarding açılır: bashKopyalaDüzenle
sudo sysctl -w net.inet.ip.forwarding=1Kalıcı yapmak için/etc/sysctl.confiçine eklenebilir. pfctlveyaipfw(macOS’a göre) ile NAT ve routing kuralları yazılır.
Örnek pf.conf:
pgsqlKopyalaDüzenlenat on utun0 from { en0:network } to any -> (utun0)
pass in all
pass out all
Sonrasında:
bashKopyalaDüzenlesudo pfctl -f /etc/pf.conf
sudo pfctl -e
Avantaj:
- MacOS VPN tünelini tüm local network (Windows VM dahil) ile paylaşabilir.
- Daha profesyonel ve kontrol edilebilir yapı.
4️⃣ Windows İçerisine VPN Kurmak
En basit ve sorunsuz yöntemlerden biri:
- Aynı OpenVPN config dosyasını Windows’a da kopyalayıp Windows üzerinde VPN bağlantısı kurmak.
Avantaj:
- MacOS ve Windows bağımsız yönetilir.
- Karmaşık paylaşım yapılarına gerek kalmaz.
Dezavantaj:
- VPN sunucusunun lisans ya da eşzamanlı bağlantı sınırlamaları varsa bu sayıyı etkileyebilir.
📌 Sonuç olarak;
Senaryona göre en iyi çözüm:
- Eğer VPN sunucusu fazla bağlantıyı kabul ediyorsa: Windows içine ayrı VPN bağlantısı kurmak
- Eğer VPN bağlantısını paylaşmak istiyorsan ve biraz uğraşırım diyorsan: macOS Internet Sharing + NAT forwarding
- Uzun vadede profesyonel çözüm istiyorsan: pfctl ile NAT yapılandırması
İstersen sana adım adım pfctl NAT ve routing kurulumunu da yazabilirim.
Hangisini tercih edersen haber ver 👍
Şunu dedin: “adım adım pfctl NAT ve routing kurulumunu da yaz”
ChatGPT:
Süper — o zaman hadi adım adım pfctl NAT + routing setup’ı net ve tertemiz anlatayım.
Senin sisteminde OpenVPN tüneli muhtemelen utun0 veya tun0 interface’inde açılıyor olacak. Bunu terminalde görebileceğiz. Parallels VM ise en0 ya da bridge0 üzerinden çalışıyor olabilir.
Biz MacOS’taki VPN tünelini NAT ile VM’e paylaşacağız.
📌 Adım Adım pfctl NAT ve Routing Yapılandırması
📝 1️⃣ MacOS’ta IP Forwarding’i Aç
Terminale:
bashKopyalaDüzenlesudo sysctl -w net.inet.ip.forwarding=1
Kalıcı yapmak için
/etc/sysctl.confoluşturup içine:
iniKopyalaDüzenlenet.inet.ip.forwarding=1
ekleyebilirsin.
📝 2️⃣ Hangi Interface’ler Kullanılıyor, Tespit Et
VPN tünel interface’ini ve VM’in bağlı olduğu interface’i bulmak için:
bashKopyalaDüzenleifconfig
Senin göreceğin önemli iki satır:
- VPN tüneli:
utun0ya datun0 - Parallels VM bağlantısı:
en0,bridge0ya davnic0olabilir.
Not al.
📝 3️⃣ pf.conf Dosyasını Düzenle
MacOS’ta pfctl config dosyası:/etc/pf.conf
Önce yedeğini al:
bashKopyalaDüzenlesudo cp /etc/pf.conf /etc/pf.conf.bak
Sonra düzenlemek için:
bashKopyalaDüzenlesudo nano /etc/pf.conf
En alta şu NAT kuralını ekle:
pfKopyalaDüzenlenat on utun0 from en0:network to any -> (utun0)
Bu kural:
en0(VM’in bağlı olduğu interface) üzerinden gelen trafiğiutun0(VPN tüneli) üzerinden dışarı NAT’layarak gönderir.
Senin interface isimlerine göre düzenle.
Örneğin:
- VM
bridge0kullanıyorsa:
pfKopyalaDüzenlenat on utun0 from bridge0:network to any -> (utun0)
Ayrıca config içinde varsa bu satırın comment satırı olmadığından emin ol:
arduinoKopyalaDüzenlescrub-anchor "com.apple/*"
nat-anchor "com.apple/*"
rdr-anchor "com.apple/*"
dummynet-anchor "com.apple/*"
anchor "com.apple/*"
📝 4️⃣ pfctl Yapılandırmasını Yükle ve Başlat
Config dosyası syntax kontrolü:
bashKopyalaDüzenlesudo pfctl -n -f /etc/pf.conf
Hata yoksa:
bashKopyalaDüzenlesudo pfctl -f /etc/pf.conf
sudo pfctl -e
Bu işlem NAT kuralını etkinleştirmiş olacak.
📝 5️⃣ Windows VM Network Ayarı
- Windows VM’de gateway olarak MacOS’un lokal IP’sini (ör. 192.168.64.1 gibi) tanımlaman gerekebilir.
- Eğer DHCP ile alıyorsa kontrol et.
- DNS olarak da Google (8.8.8.8) ya da VPN sunucusunun DNS’ini kullanabilirsin.
📝 6️⃣ (Opsiyonel) pfctl Durum ve Log Kontrolü
Aktif NAT kuralları görmek için:
bashKopyalaDüzenlesudo pfctl -s nat
Aktif pfctl durumu:
bashKopyalaDüzenlesudo pfctl -s all
Logları izlemek için:
bashKopyalaDüzenlesudo tcpdump -i utun0
veya
bashKopyalaDüzenlesudo tcpdump -i en0
📌 ve Bitti. 🎉
Bu kurulumla:
- MacOS → OpenVPN tüneli aktif
- MacOS NAT ile Windows VM trafiğini VPN’e yönlendiriyor
- Windows VM, VPN üzerinden dışarı çıkıyor
Mac yeniden başlatılırsa
pfctl’yi config’le beraber tekrar aktif etmen gerekecek.- IP forwarding ayarını da kalıcı yapmanı tavsiye ederim (isteğe bağlı).
İstersen sana tüm bu işlemleri tek komutla otomatik yapan bir bash script de yazabilirim.
Dilersen haber ver 👍
Şunu dedin: “tüm bu işlemleri tek komutla otomatik yapan bir bash script yaz”
ChatGPT:
Harika, işte sana macOS için OpenVPN tünelini NAT’layıp Parallels VM’e paylaşan, forwarding açan ve pfctl ayarlarını yapan tek komutluk bir bash script.
Senin sadece interface isimlerini kendi sistemine göre başta tanımlaman yeterli.
📦 openvpn_nat_setup.sh
bashKopyalaDüzenle#!/bin/bash
# === Kullanıcı Tanımları ===
VPN_INTERFACE="utun0" # OpenVPN tünel interface adı (ifconfig ile kontrol et)
LOCAL_INTERFACE="en0" # Parallels VM’in bağlı olduğu interface adı (ifconfig ile kontrol et)
# === IP Forwarding Aç ===
echo "[*] IP forwarding aktif ediliyor..."
sudo sysctl -w net.inet.ip.forwarding=1
# Kalıcı yapmak için sysctl.conf içine ekleyelim (varsa kontrol et)
if ! grep -q "net.inet.ip.forwarding=1" /etc/sysctl.conf 2>/dev/null; then
echo "net.inet.ip.forwarding=1" | sudo tee -a /etc/sysctl.conf
fi
# === pf.conf Dosyasını Yedekle ve Düzenle ===
echo "[*] pf.conf yapılandırması hazırlanıyor..."
sudo cp /etc/pf.conf /etc/pf.conf.bak.$(date +%F_%T)
# NAT kuralı ekle (daha önce eklenmişse ekleme)
if ! sudo grep -q "nat on $VPN_INTERFACE from $LOCAL_INTERFACE:network to any -> ($VPN_INTERFACE)" /etc/pf.conf; then
echo "nat on $VPN_INTERFACE from $LOCAL_INTERFACE:network to any -> ($VPN_INTERFACE)" | sudo tee -a /etc/pf.conf
fi
# === pfctl Yapılandırmasını Test Et ve Yükle ===
echo "[*] pfctl yapılandırması kontrol ediliyor..."
sudo pfctl -n -f /etc/pf.conf
echo "[*] pfctl yükleniyor ve aktif ediliyor..."
sudo pfctl -f /etc/pf.conf
sudo pfctl -e
# === Durum Bilgisi ===
echo "[*] Aktif NAT kuralları:"
sudo pfctl -s nat
echo "[*] İşlem tamamlandı. Artık Windows VM üzerinden VPN üzerinden çıkış yapabilirsin."
# === Log İzleme Talimatı ===
echo "Not: Trafiği izlemek için sudo tcpdump -i $VPN_INTERFACE komutunu kullanabilirsin."
📌 Kullanım
- Dosyayı kaydet:
bashKopyalaDüzenlenano openvpn_nat_setup.sh
içine yukarıdaki scripti yapıştır.
- Çalıştırılabilir yap:
bashKopyalaDüzenlechmod +x openvpn_nat_setup.sh
- Çalıştır:
bashKopyalaDüzenle./openvpn_nat_setup.sh
📌 Yapılan İşler
- IP forwarding açılıyor
/etc/sysctl.confiçine ekleniyor (kalıcı)/etc/pf.confyedekleniyor- NAT kuralı ekleniyor (önceden varsa eklenmiyor)
- pfctl yapılandırması kontrol edilip aktif ediliyor
- NAT kuralları listeleniyor
📌 Notlar
- Eğer Mac yeniden başlatılırsa sadece scripti tekrar çalıştırman yeterli.
- Eğer VPN interface ismi
utun0değilse, scriptin başındakiVPN_INTERFACEdeğerini kendi sistemine göre değiştir. - Aynı şekilde Parallels VM interface’ini
ifconfigile kontrol edipLOCAL_INTERFACEdeğerini güncelle.
Hazırsan bunu dener misin?
Eğer istersen sana otomatik VPN bağlantı kontrolü yapıp, tünel açıldığında bu scripti tetikleyen bir launchd plist de hazırlayabilirim. İlgini çekerse haber ver 📡
Şunu dedin: “otomatik VPN bağlantı kontrolü yapıp, tünel açıldığında bu scripti tetikleyen bir launchd plist de hazırla”
ChatGPT: Süper, bunu da sistem seviyesinde pratik şekilde launchd ile hallederiz. Sana VPN tüneli (utun0 veya hangisiyse) oluştuğunda otomatik olarak az önce yazdığımız scripti tetikleyecek bir launchd plist dosyası hazırlayacağım.
📌 Plan:
- MacOS’ta launchd ile bir WatchPaths veya KeepAlive + StartInterval özelliği kullanarak, belirli aralıklarla
ifconfigile tünelin açık olup olmadığını kontrol eden bir bash script çalıştıracağız. - Tünel varsa, NAT scriptini tetikleyecek.
- LaunchAgent olarak ayarlayacağız ki user session içinde çalışsın.
📦 1️⃣ VPN tünel kontrol ve NAT başlatma scripti
/usr/local/bin/vpn_nat_checker.sh diye kaydedelim:
bashKopyalaDüzenle#!/bin/bash
VPN_INTERFACE="utun0"
NAT_SCRIPT="/usr/local/bin/openvpn_nat_setup.sh"
LOGFILE="/tmp/vpn_nat_monitor.log"
# Log başlat
echo "$(date): Kontrol başlatıldı" >> "$LOGFILE"
# VPN tünel kontrol
if ifconfig | grep -q "$VPN_INTERFACE"; then
echo "$(date): $VPN_INTERFACE aktif, NAT script çalıştırılıyor..." >> "$LOGFILE"
sudo "$NAT_SCRIPT"
else
echo "$(date): $VPN_INTERFACE tüneli yok, beklemede..." >> "$LOGFILE"
fi
Kaydet
bashKopyalaDüzenlesudo nano /usr/local/bin/vpn_nat_checker.sh
→ Yapıştır
Çalıştırılabilir yap
bashKopyalaDüzenlesudo chmod +x /usr/local/bin/vpn_nat_checker.sh
📦 2️⃣ launchd plist dosyası
Bu dosya MacOS’un launchd servisine iş tanımlayacak.
Dosya adı:~/Library/LaunchAgents/com.osman.openvpn_nat_checker.plist
İçeriği:
xmlKopyalaDüzenle<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.osman.openvpn_nat_checker</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/vpn_nat_checker.sh</string>
</array>
<key>StartInterval</key>
<integer>15</integer>
<key>RunAtLoad</key>
<true/>
<key>StandardOutPath</key>
<string>/tmp/vpn_nat_checker.stdout</string>
<key>StandardErrorPath</key>
<string>/tmp/vpn_nat_checker.stderr</string>
</dict>
</plist>
Kaydet
bashKopyalaDüzenlenano ~/Library/LaunchAgents/com.osman.openvpn_nat_checker.plist
→ Yapıştır
📦 3️⃣ LaunchAgent’i yükle ve çalıştır
Yükle:
bashKopyalaDüzenlelaunchctl load ~/Library/LaunchAgents/com.osman.openvpn_nat_checker.plist
Durum kontrol:
bashKopyalaDüzenlelaunchctl list | grep openvpn_nat_checker
Çıkarmak için:
bashKopyalaDüzenlelaunchctl unload ~/Library/LaunchAgents/com.osman.openvpn_nat_checker.plist
📌 Nasıl Çalışıyor?
- Her 15 saniyede bir
ifconfigileutun0kontrolü yapıyor. - Tünel varsa
openvpn_nat_setup.shscriptini çalıştırıyor. - Çalışma ve hata loglarını
/tmp/dizinine yazıyor.
📌 Not:
- Eğer VPN tünel interface ismi değişirse
vpn_nat_checker.shiçindeVPN_INTERFACEdeğişkenini güncelle. - İster
StartIntervaldeğerini değiştirip kontrol süresini kısaltabilirsin. - Dilersen bu işlemi system-wide yapmak için
/Library/LaunchDaemons/altına admin yetkisiyle plist koyabilirim, istersen onu da hazırlarım.
✅ Tam otomatik oldu 🎉
VPN açılır açılmaz 15 saniye içinde NAT aktif.
Kurmak ister misin? Direkt sana tek seferde tüm dosyaları oluşturan bir installer bash script de hazırlayabilirim.
Dersen ki “kurulum scripti de ver”, hemen çıkarayım 📦
Şunu dedin:
tüm dosyaları oluşturan bir installer bash script de hazırla ve sonrasında kurulum scripti de ver
ChatGPT:
Mükemmel 👍 O zaman şimdi sana tüm bu işin kurulumunu tek seferde yapan eksiksiz bir installer bash script hazırlıyorum.
Bu script:
- Gerekli tüm dosyaları oluşturur
- pf.conf yedeğini alır
- NAT kuralını ekler
- IP forwarding açar
- launchd plist dosyasını oluşturur
- ve hepsini başlatır.
📦 Tüm Sistemi Kurup Çalıştıran Installer Script
Dosya adı: install_openvpn_nat_service.sh
bashKopyalaDüzenle#!/bin/bash
# === Kullanıcı Tanımları ===
VPN_INTERFACE="utun0"
LOCAL_INTERFACE="en0"
NAT_SCRIPT="/usr/local/bin/openvpn_nat_setup.sh"
CHECKER_SCRIPT="/usr/local/bin/vpn_nat_checker.sh"
PLIST_FILE="$HOME/Library/LaunchAgents/com.osman.openvpn_nat_checker.plist"
LOGFILE="/tmp/vpn_nat_monitor.log"
echo "🔧 Kurulum başlatılıyor..."
# === IP Forwarding Aç ===
echo "[*] IP forwarding aktif ediliyor..."
sudo sysctl -w net.inet.ip.forwarding=1
if ! grep -q "net.inet.ip.forwarding=1" /etc/sysctl.conf 2>/dev/null; then
echo "net.inet.ip.forwarding=1" | sudo tee -a /etc/sysctl.conf
fi
# === pf.conf Yedeği ve NAT Kuralı ===
echo "[*] pf.conf yedekleniyor ve NAT kuralı ekleniyor..."
sudo cp /etc/pf.conf /etc/pf.conf.bak.$(date +%F_%T)
if ! sudo grep -q "nat on $VPN_INTERFACE from $LOCAL_INTERFACE:network to any -> ($VPN_INTERFACE)" /etc/pf.conf; then
echo "nat on $VPN_INTERFACE from $LOCAL_INTERFACE:network to any -> ($VPN_INTERFACE)" | sudo tee -a /etc/pf.conf
fi
sudo pfctl -n -f /etc/pf.conf
sudo pfctl -f /etc/pf.conf
sudo pfctl -e
# === openvpn_nat_setup.sh Scripti ===
echo "[*] NAT setup scripti oluşturuluyor..."
sudo tee "$NAT_SCRIPT" > /dev/null <<EOF
#!/bin/bash
echo "[*] IP forwarding aktif ediliyor..."
sudo sysctl -w net.inet.ip.forwarding=1
if ! grep -q "net.inet.ip.forwarding=1" /etc/sysctl.conf 2>/dev/null; then
echo "net.inet.ip.forwarding=1" | sudo tee -a /etc/sysctl.conf
fi
echo "[*] pf.conf NAT kuralı kontrol ediliyor..."
if ! sudo grep -q "nat on $VPN_INTERFACE from $LOCAL_INTERFACE:network to any -> ($VPN_INTERFACE)" /etc/pf.conf; then
echo "nat on $VPN_INTERFACE from $LOCAL_INTERFACE:network to any -> ($VPN_INTERFACE)" | sudo tee -a /etc/pf.conf
fi
sudo pfctl -n -f /etc/pf.conf
sudo pfctl -f /etc/pf.conf
sudo pfctl -e
echo "[*] NAT ve forwarding ayarlandı."
EOF
sudo chmod +x "$NAT_SCRIPT"
# === vpn_nat_checker.sh Scripti ===
echo "[*] VPN tünel kontrol scripti oluşturuluyor..."
sudo tee "$CHECKER_SCRIPT" > /dev/null <<EOF
#!/bin/bash
VPN_INTERFACE="$VPN_INTERFACE"
NAT_SCRIPT="$NAT_SCRIPT"
LOGFILE="$LOGFILE"
echo "\$(date): Kontrol başlatıldı" >> "\$LOGFILE"
if ifconfig | grep -q "\$VPN_INTERFACE"; then
echo "\$(date): \$VPN_INTERFACE aktif, NAT script çalıştırılıyor..." >> "\$LOGFILE"
sudo "\$NAT_SCRIPT"
else
echo "\$(date): \$VPN_INTERFACE tüneli yok, beklemede..." >> "\$LOGFILE"
fi
EOF
sudo chmod +x "$CHECKER_SCRIPT"
# === launchd plist Dosyası ===
echo "[*] launchd plist dosyası oluşturuluyor..."
tee "$PLIST_FILE" > /dev/null <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.osman.openvpn_nat_checker</string>
<key>ProgramArguments</key>
<array>
<string>$CHECKER_SCRIPT</string>
</array>
<key>StartInterval</key>
<integer>15</integer>
<key>RunAtLoad</key>
<true/>
<key>StandardOutPath</key>
<string>/tmp/vpn_nat_checker.stdout</string>
<key>StandardErrorPath</key>
<string>/tmp/vpn_nat_checker.stderr</string>
</dict>
</plist>
EOF
# === launchd servisini yükle ===
echo "[*] launchd servisi yükleniyor..."
launchctl unload "$PLIST_FILE" 2>/dev/null
launchctl load "$PLIST_FILE"
echo "✅ Kurulum tamamlandı!"
echo "➡ VPN tüneli açıldığında NAT otomatik devreye girecek."
📌 Kurulum Talimatı:
- Dosyayı kaydet:
bashKopyalaDüzenlenano install_openvpn_nat_service.sh
→ Yapıştır
- Çalıştırılabilir yap:
bashKopyalaDüzenlechmod +x install_openvpn_nat_service.sh
- Çalıştır:
bashKopyalaDüzenle./install_openvpn_nat_service.sh
📌 Sonuç:
✅ /etc/pf.conf yedeği alınır
✅ NAT kuralı eklenir
✅ IP forwarding açılır
✅ NAT scripti oluşturulur
✅ VPN kontrol scripti oluşturulur
✅ launchd plist dosyası oluşturulur ve yüklenir
✅ Hepsi otomatik çalışır duruma gelir
📌 VPN açıldığında:
ifconfig‘deutun0belirdiği anda- NAT ve pfctl kuralları otomatik uygulanır
Dilersen bu installer’ı .pkg haline bile getirebiliriz ya da cron/launchdaemon olarak system-wide kurabiliriz.
İster misin?
👉 Eğer istersen sana direkt .pkg installer scriptini de çıkarayım.
Biz sordukça chatgpt cevaplamaya ve yeni cevaplar için bize yeni soru yönlendirmelerinde bulunmaya devam etti. Biz buraya kadar olanları sizin için yayınlıyoruz. bu promtlara göre sizde sorularınızı sorup, çözümlerinizi bulabilirsiniz.
Buraya kadar okuduğunuz için teşekkür ederiz. Umarım faydalı bir içerik olur sizler için.












Geri bildirim: macOS Üzerinde OpenVPN NAT Paylaşımı ve Parallels VM Çözümü - Bilişim Profesyonelleri Haber Sitesi