CGNAT havuz IP ile modemine bağlı aygıtları doğrudan port ile açamazsın. Bu durumda port açamadığın için DDNS de sağlıklı bir yöntem olmayacaktır. İşine yarayacak en sağlıklı çözüm statik IP almaktır.
Yerel ağın için statik IP aldığını varsayarak şöyle bir yöntem önerebillirim:
birinci adım:
Önce VDS sunucunda SSH ile bağlanıp docker kur. (docker içerisindeki conteinerları yalıtarak Ubuntu server üzerinde kullanacağın için olası hatalarında sistem bütünlüğünü etkilemeyecektir.) Birden çok servisi bir birini etkilemeden kullanabilirsin.
sistemin docker kurulumu için hazırlanması:
Bash:
# Docker'ın resmi GPG anahtarını ekle:
sudo apt-get update.
sudo apt-get install ca-certificates curl.
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Depoyu Apt kaynaklarına ekle:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
docker kurulumu:
Bash:
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Kurulumu doğrula:
Bash:
sudo docker run hello-world
Bu komut bir test imajı indirip bir conteiner içerisinde çalıştıuracak ve başarı mesajı vermeli.
Docker kurduğuna göre senin için önerilerimin ikinci adımına geçelim.
ikinci adım:
İkinci adımda sistemini etkilemeden docker üzerinde bir kap içerisinde çalışan nginx ters prox kuracağız.
Bu konuda letsencrypt destekli ve GUI (kullanıcı arayüzü) bulunan nginxproxymanager önereceğim. Hem yeni başlayanlar için kullanımı kolay hem de oldukça hafiftir.
nginxproxymanager docker compose ile kurulumu:
Önce SSH ile VDS sunucuna bağlan ve bulunduğun dizin veya istediğin bir dizinde nano editörü ile
docker-compose.yml adında bir dosya aç. (veya aşina olduğun VI vb. editör kullan) ben nano ilei ilerleyeceğim.
İçerisine şu docker compose kodlarını ekle:
Bash:
version: '3.8'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
# Aşağıdaki bağlantı noktaları biçimi <host-port>:<container-port> şeklindedir.
- '80:80' # Genel HTTP Port.
- '443:443' # Genel HTTPS Port.
- '81:81' # Admin Kısmı için Port.
# Ayrıca port eklemek istersen aşağıdaki yorum satırını kaldırıp yapabilirsin.
# - '21:21' # FTP.
environment:
DB_SQLITE_FILE: "/data/database.sqlite" # mysql de kullanabilirsin ama önce bir conteiner içinde ayağa kaldırıp bağlantı sağlaman gerekir.
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
CTRL + o ile docker compose. Yml dosyanı kaydet. CTRL + X ile nano editörden çık.
Docker compose dosyamız hazır olduğuna göre nginx-proxy-Manager uygulamamızı ayağa kaldırabiliriz.
Docker compose. Yml bulunduğu dizinde şu komutu yürüterek uygulamayı ayağa kaldır.
Bu komutla birlikte docker docker compose yml. Dosyamızdaki servisleri bizim için ayağa kaldırıp nginix proxy Manager'in ilgili portları dinlemesini sağlayacak.
Bundan sonrası için nginx-proxy-Manager GUI ile iki sunucun arasında ters proxy yaparak
sunucu-ip:port gelen isteği
local-server:port yönlendirecektir. Domainin varsa local serveri buradan domaine yönlendireceksin.
Olası bağlantı sorunlarında güvenlik duvarı ayarlarını kontrol edip ilgili portları güvenlik duvarından açmayı unutma.
ek olarak şunu söyleyeyim:
Statik IP aldığında zaten yerel Server'ı doğrudan internete açabileceksin. Bu durumda yerel sunuc statik IP adresini kullanacaksan yukarıdaki yönteme ihtiyacın yok. Ama statik IP adresin yerel konumunu gösterecektir.
Nginx-proxy Manager'a bağlanmak için
sunucip: 81 portunu tarayıcıda çağır.
Varsayılan nginix-proxy-Manager erişim bilgileri:
Kod:
Email: admin@example.com
Password: changeme
Bu server üzerinden bütün ters proxy işlerini bu uygulama ile GUI kısmından istediğin gibi yapabilirsin artık.