Přeskočit na obsah

Synology DSM: jak uvolnit porty 80 a 443 pro reverzní proxy

Synology DSM: jak uvolnit porty 80 a 443 pro reverzní proxy

Na Synology mi v Dockeru běží Nginx Proxy Manager (NPM) a ten chce mít porty 80 a 443 pro sebe. Na nich ale už sedí vestavěný nginx DSM, a tak kontejner při startu skončí s hláškou address already in use.

Co budete potřebovat

  • Synology s DSM (já mám DS918+ s DSM 7.1)
  • zapnuté SSH (Ovládací panely → Terminál a SNMP → Povolit službu SSH)
  • účet ze skupiny administrators, aby fungovalo sudo
  • volné porty, na které DSM přesunete – já volím 10080 a 10443

Proč nestačí upravit nginx.conf

První nápad je otevřít /etc/nginx/nginx.conf a přepsat porty tam. Funguje to přesně do chvíle, než DSM konfiguraci vygeneruje znovu – při restartu, při změně čehokoli v Ovládacích panelech nebo při aktualizaci. Zdrojem pravdy jsou šablony v adresáři /usr/syno/share/nginx/, ze kterých se nginx.conf skládá. Upravovat se proto musí ty.

1. Podívejte se, co v šablonách je

Přihlaste se na NAS přes SSH a vypište si všechny řádky s listen, které používají port 80 nebo 443. Spouští se v terminálu na NASu:

sudo grep -nE 'listen[[:space:]]+(\[::\]:)?(80|443)[^0-9]' /usr/syno/share/nginx/*.mustache

Uvidíte, ve kterých souborech a na kterých řádcích se porty nastavují. Typicky jde o dvojice listen 80 a listen [::]:80 (IPv4 a IPv6) a totéž pro 443. Tenhle výpis se hodí mít před očima, ať víte, co se bude měnit.

2. Zálohujte šablony

Než začnete cokoli přepisovat, udělejte si kopii celého adresáře. Je to jeden příkaz a ušetří vám to nervy, kdyby se něco pokazilo 😈

sudo cp -a /usr/syno/share/nginx /root/nginx-mustache-backup

3. Přepište porty na 10080 a 10443

Následující dva příkazy změní port jen v direktivách listen, a to pro IPv4 i IPv6. Jinde v šablonách číslo 80 nebo 443 zůstane, jak je.

sudo sed -i -E 's/^([[:space:]]*listen[[:space:]]+(\[::\]:)?)80([^0-9])/\110080\3/' /usr/syno/share/nginx/*.mustache
sudo sed -i -E 's/^([[:space:]]*listen[[:space:]]+(\[::\]:)?)443([^0-9])/\110443\3/' /usr/syno/share/nginx/*.mustache

Zápis \110080 vypadá podezřele, ale je v pořádku. Sed bere jako zpětný odkaz jen jednu číslici, takže je to \1 (zachycené listen s mezerami) a za ním 10080.

Kontrola – zopakujte grep z kroku 1. Tentokrát by neměl vypsat nic:

sudo grep -nE 'listen[[:space:]]+(\[::\]:)?(80|443)[^0-9]' /usr/syno/share/nginx/*.mustache

Pokud něco vypíše, je na tom řádku listen uprostřed (třeba za značkou šablony) a sed ho nechytil. Takový řádek opravte ručně, například sudo vi nad daným souborem.

4. Restartujte nginx

Na DSM 7 se služby ovládají přes synosystemctl:

sudo synosystemctl restart nginx

DSM při restartu znovu vygeneruje nginx.conf už z upravených šablon.

5. Ověřte, že jsou porty volné

sudo netstat -tlnp | grep -E ':(80|443|10080|10443) '

Výstup by měl ukazovat nginx na portech 10080 a 10443 a na 80 a 443 nic. Teď můžete spustit (nebo restartovat) kontejner s Nginx Proxy Managerem, který si porty 80 a 443 namapuje na sebe.

Pokud je 443 pořád obsazený, mrkněte do Ovládacích panelů → Přihlašovací portál → Upřesnit → Reverzní proxy. Pravidla reverzní proxy z DSM umí port 443 držet i po úpravě šablon, takže je smažte, nebo je převeďte do NPM. Pomohl také restart celého NASu.

Na co si dát pozor

  • Web Station a další služby na 80/443. Všechno, co DSM servíroval na standardních portech (Web Station, přesměrování na DSM), se přestěhuje na 10080 a 10443. Samotné rozhraní DSM na 5000 a 5001 to neovlivní.
  • Aktualizace DSM. Aktualizace může šablony vrátit do původní podoby a porty 80 a 443 si DSM vezme zpátky. Po každé aktualizaci proto spusťte grep z kroku 1 a případně zopakujte kroky 3 a 4.
  • Jiné verze DSM. Na DSM 7.1 to funguje. Lidé na fórech hlásí u novějších verzí (7.2 a 7.3) smíšené výsledky – někomu to jde stejně, jinde DSM port 443 drží dál. Pokud máte novější DSM a porty se neuvolní, zkuste nejdřív smazat pravidla reverzní proxy v DSM a restartovat NAS.

Návrat zpět. Stačí vrátit zálohu a restartovat nginx:

sudo cp -a /root/nginx-mustache-backup/. /usr/syno/share/nginx/
sudo synosystemctl restart nginx

Co teď funguje

NPM má porty 80 a 443 pro sebe, vyřizuje certifikáty od Let’s Encrypt a DSM i Web Station žijí na 10080 a 10443.

Sdílet článek LinkedIn Facebook

Napsat komentář

E-mail nebude zveřejněn.