Пренасочване на портове и пренасочване на портове в iptables - Бележки за маниаци - Роман Богачев

Пренасочване на трафик зад NAT или пренасочване на трафик към друг сървър

Най-често пренасочването на трафик се използва, ако сме в локална мрежа и сме отделени от външния свят с шлюз. За да отворим достъп за локални услуги (ssh, web, ftp), трябва да препратим портове. Тъй като ще използваме сървър на Linux като шлюз, ще извършим тези действия с помощта на iptables.

Нека дефинираме променливите, които ще се използват в статията:

Пренасочване на портове

На шлюза пристига пакет, който трябва да пренасочим към желания сървър в локалната мрежа, преди да вземем решение за маршрутизиране, тоест във веригата PREROUTING на таблицата nat.

Помислете за пример

Следващата стъпка е да вземете решение за маршрутизиране. В резултат на това пакетът ще премине по веригатаНАПРЕД на таблицатаfilter, така че трябва да добавите разрешително правило към него. Може да изглежда така например:

Помислете за пример

Прекарайте пакета, който е дошъл до външния интерфейс, напуска вътрешния интерфейс и е предназначен за уеб сървъра (192.168.1.50:80) на локалната мрежа.

От една страна, тези две правила са достатъчни за всички клиенти извън локалната мрежа да се свържат успешно с вътрешния сървър. От друга страна, какво ще се случи, ако клиент се опита да се свърже от локалната мрежа? Връзката просто няма да се осъществи: страните няма да се разберат.

Има два начина да избегнете тази ситуация.

Първият е да разграничите обажданията към сървъра отвътре и отвън, за да направите това, създайте A-запис на локалния DNS сървър, например example.com, сочещ към 192.168.1.50

Помислете за пример

Трябва допълнително да се отбележи, че това правило е важно само за вътрешни клиенти. Отговорвъншните клиенти ще преминат през шлюза във всеки случай.

Но засега това не е достатъчно за нормална работа. Да приемем, че самият шлюз действа като клиент. В съответствие с предишните ни правила, той ще управлява трафик от себе си към себе си и ще представя изходящите пакети като транзитни.

Помислете за пример

Сега, за удобство, ще запишем скрипта, за да не предписваме правилата ръчно всеки път.

rules.sh

Пренасочване на портове

Пренасочването на портове е необходимо, ако искаме да "маскираме" вътрешната услуга, осигурявайки достъп до нея отвън не на стандартния, а на съвсем различен порт.

Наборът от правила заiptables ще се различава незначително, така че веднага ще дам пример за крайния скрипт за мързеливите.