İşletim SistemleriNasıl Yapılır

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: Bridged seç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 Sharing bölümüne gir.
  • Share your connection from: kısmında VPN interface’ini (ör. utun0 veya tun0) seç.
  • To computers using: kısmında Parallels VM’in bağlı olduğu interface (genellikle Ethernet veya Wi-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:

  1. MacOS’ta IP forwarding açılır: bashKopyalaDüzenlesudo sysctl -w net.inet.ip.forwarding=1 Kalıcı yapmak için /etc/sysctl.conf içine eklenebilir.
  2. pfctl veya ipfw (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.conf oluş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: utun0 ya da tun0
  • Parallels VM bağlantısı: en0, bridge0 ya da vnic0 olabilir.

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ği
  • utun0 (VPN tüneli) üzerinden dışarı NAT’layarak gönderir.

Senin interface isimlerine göre düzenle.

Örneğin:

  • VM bridge0 kullanı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

  1. Dosyayı kaydet:
bashKopyalaDüzenlenano openvpn_nat_setup.sh

içine yukarıdaki scripti yapıştır.

  1. Çalıştırılabilir yap:
bashKopyalaDüzenlechmod +x openvpn_nat_setup.sh
  1. Çalıştır:
bashKopyalaDüzenle./openvpn_nat_setup.sh

📌 Yapılan İşler

  • IP forwarding açılıyor
  • /etc/sysctl.conf içine ekleniyor (kalıcı)
  • /etc/pf.conf yedekleniyor
  • 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 utun0 değilse, scriptin başındaki VPN_INTERFACE değerini kendi sistemine göre değiştir.
  • Aynı şekilde Parallels VM interface’ini ifconfig ile kontrol edip LOCAL_INTERFACE değ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 ifconfig ile 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 ifconfig ile utun0 kontrolü yapıyor.
  • Tünel varsa openvpn_nat_setup.sh scriptini ç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.sh içinde VPN_INTERFACE değişkenini güncelle.
  • İster StartInterval değ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ı:

  1. Dosyayı kaydet:
bashKopyalaDüzenlenano install_openvpn_nat_service.sh

→ Yapıştır

  1. Çalıştırılabilir yap:
bashKopyalaDüzenlechmod +x install_openvpn_nat_service.sh
  1. Ç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‘de utun0 belirdiğ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.

One thought on “macOS’ta OpenVPN NAT Paylaşımı: Parallels VM İçin Tam Çözüm

Yorumlar kapatıldı.