перенаправлення порту на openwrt в командному рядку

знадобилося дистанційно перенаправити порт (webmin у моєму випадку, 10000) на домашньому маршрутизаторі до сервера… секундна справа з веб-інтерфейсом openwrt, але зізовні я маю тільки ssh. зрозуміло, що все можна зробити і в командному рядку — як?

знов uci. отже, ssh до рутера, і дивимося, що в налаштуваннях брендмауера:

uci show firewall | less

десь наприкінці виводу будуть правила перенаправлення (@redirect[x]). додаємо ще одне:

uci add firewall redirect

після цього можна підглянути номер нового правила (останній рядок @redirect[x]), але простіше використати -1 (вказівник на останннє); нааштовуємо якось так:

uci set firewall.@redirect[-1].name='Webmin to server (:10000)'
uci set firewall.@redirect[-1].target='DNAT'
uci set firewall.@redirect[-1].src='wan'
uci set firewall.@redirect[-1].src_dport='10000'
uci set firewall.@redirect[-1].dest='lan'
uci set firewall.@redirect[-1].dest_ip='192.168.0.99'
uci set firewall.@redirect[-1].dest_port='10000'

для тих, хто в танку: коли рутер отримує запит на порт 10000 (.src_dport='10000') ззовні (.src='wan'), він переадресує трафік на порт 10000 (.dest_port=10000) машини зі вказаною адресою (.dest_ip='192.168.0.99') в локальній мережі (.dest='lan').

перевірка:

uci show firewall | less

збереження налаштувань:

uci commit firewall

перезавантаження брендмауера:

service firewall restart

готово — можна «стукатися» на веб-інтерфейс webmin ззовні (треба знати публічний ip або мати (динамічну?) прив’язку dns, наприклад, на duckdns.org):

https://<сервер>.duckdns.org:10000

зрозуміло, що будь-який відкритий назовні порт, а тим більше webmin за портом — це ризик, тож:

  • подумати, чи справді треба?
  • поміняти порт 10000 на щось довільне;
  • додати користувача і заборонити автентифікацію root;
  • встановити/налаштувати fail2ban;
  • увімкнути двофакторну автентифікацію;
  • що ще?

зображення