PDA

Виж пълна версия : iptables nat


JoZ
06.01.03 г., 06:48
Ползвам iptables 1.2.5, като пускам всички компютри от
интранет през едно ip навън т.е. pat. Интересува ме дали
освен pat, мога да правя и nat в същото време т.е. определени
машини от интранет да могат да ползват собствено отделно
ip от свободните ми външни ip-та, но translation-а да става
в iptables, а не да route-вам real ip в интранет.

Пример: имам mail server който искам да преместя в интранет,
имам web server който искам също да е в интранет, но на
друга машина и отделно да си имам машината за gateway
както в момента.

Въпроса ми е дали може да се направи това с iptables ако
някой се е занимавал с нещо такова?

QWERTY
07.01.03 г., 00:15
Може всичко. В твоя случай това ще стнане с port mapping, въпреки, че тук ще го ползваш точно като NAT. Прочети документацията на iptables за действието REDIRECT. Ще ти обясня принципа пък ти ще си видиш синтаксиса. Примерно за уеб сървър - задаваш в iptables, че заявка идваща към външното IP, което искаш да ползваш (1), се препраща към истинската машина с него. Примерно уеб сървъра в локаната ти мрежа е с IP 192.168.1.1 - препращаш натам. Обратния трафик изкарваш навън с външното IP. На практика е също толкова лесно колкото звучи и на теория. ;)
Едно прочитане на документацията би трябвало да ти е достатъчно.:)




(1) предполага се, че заявките ти ще идват до там - тоест външните IP-та, които искаш за използваш се рутират до гейта

|RABBIT|
08.01.03 г., 07:23
Има вярно - едно прочитане на документацията би било достатъчно и никак не би било излишно. Target REDIRECT не позволява промяна(съответно и указване) на друг адрес. Този target е разчетен само за port redirection и съответно приема само един тип опция --to-ports xx. Това което се опитваш да обясниш на Джоз се прави или с двойка DNAT/SNAT или с NETMAP който е включен в patch-o-matic версия 1.2.7 или по висока. За повече справки:
http://www.netfilter.org/documentation/HOWTO//NAT-HOWTO-6.html#ss6.2
http://www.netfilter.org/documentation/HOWTO//netfilter-extensions-HOWTO-4.html#ss4.4

QWERTY
08.01.03 г., 11:36
Да, вярно казва |RABBIT| - аз съм се оплел от един друг софтуер, където се прави с PM. JoZ, прочети ги двата линка - няма начин да не сгрееш водата. Механизъма е тоя, но се прави с DNAT и SNAT. Пък можеш да ползваш и NETMAP, което аз също не го знаех...

JoZ
01.05.03 г., 21:04
Разгеле намерих време и желание за да пусна nat. Работи
идеално с DNAT и SNAT. Имало някои детаили които докато не
опита човек не му се изясняват. Детаили от рода на този, че е
необходимо на lin router machine да има въпросните статични
ip адреси като интерфейси иначе ipt не знае какво да прави.
Конфигурацията (ако някой се поинтересува някога) е:

real ip: 1.2.3.1 - 1.2.3.4 -> nat, 1.2.3.5 -> pat
private ip: 192.168.1.0/24

Да кажем искате да транслирате 192.168.1.0/25 за pat и
192.168.1.129 - 192.168.1.132 като nat. Lin router има външно
ip 1.2.3.5 и вътрешно ip 192.168.1.2.

Следва примерна конфигурация която е проверена и работи в
момента макар и с различни ip адрес:

*nat
# nat
-A PREROUTING -d 1.2.3.1 -j DNAT --to 192.168.1.129
-A PREROUTING -d 1.2.3.2 -j DNAT --to 192.168.1.130
-A PREROUTING -d 1.2.3.3 -j DNAT --to 192.168.1.131
-A PREROUTING -d 1.2.3.4 -j DNAT --to 192.168.1.132
-A POSTROUTING -s 192.168.1.129 -j SNAT --to 1.2.3.1
-A POSTROUTING -s 192.168.1.130 -j SNAT --to 1.2.3.2
-A POSTROUTING -s 192.168.1.131 -j SNAT --to 1.2.3.3
-A POSTROUTING -s 192.168.1.132 -j SNAT --to 1.2.3.4
# pat
-A POSTROUTING -s 192.168.1.0/25 -o eth0 -j SNAT --to 1.2.3.5
COMMIT

*filter
-P INPUT DROP
-P FORWARD DROP
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# localnet
-A INPUT -s 192.168.1.0/24 -j ACCEPT
# localhost
-A INPUT -i lo -j ACCEPT
# lin web
-A INPUT -p tcp -m tcp -d 192.168.1.2 --dport 80 -j ACCEPT
# log
-A INPUT -p tcp -m tcp -j LOG --log-level 3
-A INPUT -p udp -m udp -j LOG --log-level 3
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
# win web
-A FORWARD -p tcp -m tcp -d 192.168.1.129 --dport 80 -j ACCEPT
# mask out
-A FORWARD -s 192.168.1.0/24 -j ACCEPT
COMMIT

P.S. Благодаря на |Rabbit| за помощта при пускането на nat.

QWERTY
05.05.03 г., 09:29
Originally posted by JoZ
-A PREROUTING -d 1.2.3.1 -j DNAT --to 192.168.1.129
-A PREROUTING -d 1.2.3.2 -j DNAT --to 192.168.1.130
-A PREROUTING -d 1.2.3.3 -j DNAT --to 192.168.1.131
-A PREROUTING -d 1.2.3.4 -j DNAT --to 192.168.1.132
-A POSTROUTING -s 192.168.1.129 -j SNAT --to 1.2.3.1
-A POSTROUTING -s 192.168.1.130 -j SNAT --to 1.2.3.2
-A POSTROUTING -s 192.168.1.131 -j SNAT --to 1.2.3.3
-A POSTROUTING -s 192.168.1.132 -j SNAT --to 1.2.3.4
# pat


Когато си DNAT-нал някакви IP-та и мислиш да ги ползваш от вънка на вътре (за някакви сървърни услуги), не ти трябва да ги SNAT-ваш наобратно. Поне не е задължително. Когато отвън се отвори сесия и тя мине ппрез това:

-A PREROUTING -d 1.2.3.2 -j DNAT --to 192.168.1.130

на излизане тя автоматично де раз-DNAT-ва, като за source address ще бъде лепнато 1.2.3.2.
А пък "на излизане" от сървърите, когато сесията се започва оттам, нищо не пречи да се ползва едно IP за всичките, различно от DNAT-натите.

За да ти работи системата задължителни са само тези редове:

-A PREROUTING -d 1.2.3.1 -j DNAT --to 192.168.1.129
-A PREROUTING -d 1.2.3.2 -j DNAT --to 192.168.1.130
-A PREROUTING -d 1.2.3.3 -j DNAT --to 192.168.1.131
-A PREROUTING -d 1.2.3.4 -j DNAT --to 192.168.1.132

JoZ
06.05.03 г., 02:09
На теория може и да си прав, на практика обаче не става
защото ми трябва истински nat в случая т.е. отвън навътре и
обратно да е винаги едно и също ip.