Есть такая сеть:
Интернет <-> 213.145.XX.XX =[DSL-модем, он же firewall]= 10.0.0.1 <-> 10.0.0.2(eth1)=[Linux SlackWare 10.2]=192.168.0.1(eth0) <-> 192.168.0.0/24(локалка)
Во внешней сети есть SMTP-сервер, скажем 214.100.1.1:25, а в локальной сети есть компы, которые знать не знают о его существовании и считают сервером комп с внутренним адресом 192.168.0.1 и коннектятся к нему. Вопрос: как и можно ли вообще средствами iptables сделать прозрачный форвардинг через сервер + модем(адрес его шлюза 10.0.0.1), т.е. полноценную замену 192.168.0.1:25 на 214.100.1.1:25 и, соответственно, обратно?
а если в почтовых клиентах указать SMTP 214.100.1.1 ????
или не судьба?
>а если в почтовых клиентах указать SMTP 214.100.1.1 ????
>или не судьба?Увы, в этом все и дело - адрес сервера невозможно сменить.
>Интернет <-> 213.145.XX.XX =[DSL-модем, он же firewall]= 10.0.0.1 <-> 10.0.0.2(eth1)=[Linux SlackWare 10.2]=192.168.0.1(eth0) <-> 192.168.0.0/24(локалка)>можно ли вообще средствами iptables сделать прозрачный форвардинг через сервер
>+ модем(адрес его шлюза 10.0.0.1), т.е. полноценную замену 192.168.0.1:25 на 214.100.1.1:25Если на [DSL-модем, он же firewall] есть source NAT, то можно -
надо настроить destination NAT на [Linux SlackWare 10.2] -
man iptables про DNAT
>Если на [DSL-модем, он же firewall] есть source NAT, то можно -
>
>надо настроить destination NAT на [Linux SlackWare 10.2] -
>man iptables про DNATДа я его уже зачитался... :(
Мне вот что непонятно - ведь TCP-пакеты предназначены локально для 192.168.0.1, и приходят на интерфейс eth0. А их надо переслать на выход интерфейса eth1, на модем-шлюз, предварительно проNATив dest-адрес на 214.100.1.1 ну и обратно, естетсвенно; а вот как увязать оба интерфейса? Логика работы iptables мне тут неясна...
>Да я его уже зачитался... :(
Тогда читайте документацию на iptables.org )>Мне вот что непонятно - ведь TCP-пакеты предназначены локально для 192.168.0.1, и
>приходят на интерфейс eth0. А их надо переслать на выход интерфейса
>eth1, на модем-шлюз, предварительно проNATив dest-адрес на 214.100.1.1 ну и обратно,
>естетсвенно; а вот как увязать оба интерфейса? Логика работы iptables мне
>тут неясна...Подмена адреса происходит до маршрутизации,
затем присходит обычная маршрутизация.
Поскольку новый адрес не попадает ни в одну
из явно указанных в таблице маршрутизации сетей,
то пакет отправляется в маршрут по умолчанию - в eth1
что-то я никак не пойму.
у вас поднят в локалке почтовый сервер который должен быть виден в наружи?
или юзера должны отправлять почту через вшешний сервер?
Вы, вообще-то, кого спрашиваете ?
>что-то я никак не пойму.
>у вас поднят в локалке почтовый сервер который должен быть виден в
>наружи?
>или юзера должны отправлять почту через вшешний сервер?Второе - из локалки видеть внешний сервер, считая, что он "внутренний".
вам через него надо почту отправлять или просто его видеть как внутренний?
если почту отплавлять то настроить клиентов.
>вам через него надо почту отправлять или просто его видеть как внутренний?
>
>если почту отплавлять то настроить клиентов.Почту отправлять. В любом случае нужно полноценное TCP соединение.
>Подмена адреса происходит до маршрутизации,
>затем присходит обычная маршрутизация.
>Поскольку новый адрес не попадает ни в одну
>из явно указанных в таблице маршрутизации сетей,
>то пакет отправляется в маршрут по умолчанию - в eth1#iptables -A INPUT -t nat -s 192.168.0.0/24 -d 192.168.0.1 -p tcp --destination-port 25 -j DNAT --to-destination 214.100.1.1:25
Логически так выходит... Правда, насчет синтаксиса не уверен. Может, не "-A INPUT" а "-A PREROUTING" ?
>#iptables -A INPUT -t nat -s 192.168.0.0/24 -d 192.168.0.1 -p tcp --destination-port
>25 -j DNAT --to-destination 214.100.1.1:25
>
>Логически так выходит... Правда, насчет синтаксиса не уверен.
Только не INPUT, а PREROUTING и можно добавить -i eth0
>Только не INPUT, а PREROUTING и можно добавить -i eth0А как увидеть цепочку PREROUTING ? "iptables -L" только "INPUT", "OUTPUT" и "FORWARD" выдает. Или еще как-то это все к INPUT'у прикрутить надо?
>>Только не INPUT, а PREROUTING и можно добавить -i eth0
>
>А как увидеть цепочку PREROUTING ? "iptables -L" только "INPUT", "OUTPUT" и
>"FORWARD" выдает. Или еще как-то это все к INPUT'у прикрутить надо?
>
iptables -t nat -L
http://www.opennet.me/docs/RUS/iptables/
Мда, сегодня делал такое же у себя, даже удивился что кому-то понадобилось аналогичное. У меня была цель выдавать внтутреннюю машину за smtp,pop3,imap сервер который находится в другом месте (колокейшн у провайдера). Смысл всего этого в том, чтобы сделать юзерам бесплатную почту (без подключения к инету через vpn). Итого имеем:
Пограничный рутер внтутренний ип - 10.1.1.1, внешний 123.123.123.123
Почтовый сервер в инете ип - 200.200.200.200на рутере пишем:
iptables -t nat -A PREROUTING -d 10.1.1.1 -p tcp --dport 25 -j DNAT --to-destination 200.200.200.200:25
iptables -t nat -A PREROUTING -d 10.1.1.1 -p tcp --dport 110 -j DNAT --to-destination 200.200.200.200:110Аналогично проделать с портами 143,465,993,995 - imap,smtps,imaps,pop3s
Теперь делаем нат внутренней сети:
iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -d 200.200.200.200 -o vlan3 -p tcp --dport 25 -j SNAT --to-source 123.123.123.123
iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -d 200.200.200.200 -o vlan3 -p tcp --dport 110 -j SNAT --to-source 123.123.123.123
и так далее ..
>Мда, сегодня делал такое же у себя, даже удивился что кому-то
>понадобилось аналогичное. У меня была цель выдавать внтутреннюю машину за
>smtp,pop3,imap сервер который находится в другом месте (колокейшн у провайдера). Смысл
>всего этого в том, чтобы сделать юзерам бесплатную почту (без подключения
>к инету через vpn). Итого имеем:
>Пограничный рутер внтутренний ип - 10.1.1.1, внешний 123.123.123.123
>Почтовый сервер в инете ип - 200.200.200.200
>
>на рутере пишем:
>iptables -t nat -A PREROUTING -d 10.1.1.1 -p tcp --dport 25 -j
>DNAT --to-destination 200.200.200.200:25
>iptables -t nat -A PREROUTING -d 10.1.1.1 -p tcp --dport 110 -j
>DNAT --to-destination 200.200.200.200:110
>
>Аналогично проделать с портами 143,465,993,995 - imap,smtps,imaps,pop3s
>
>Теперь делаем нат внутренней сети:
>iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -d 200.200.200.200 -o vlan3 -p
>tcp --dport 25 -j SNAT --to-source 123.123.123.123
>iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -d 200.200.200.200 -o vlan3 -p
>tcp --dport 110 -j SNAT --to-source 123.123.123.123
>и так далее ..Заработало! В моем случае скрипт таков:
#!/bin/bash
iptables -t nat -A PREROUTING -s 192.168.0.0/24 -d 192.168.0.1 -p tcp --dport 25 -j DNAT --to-destination 214.100.1.1:25
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 214.100.1.1 -o eth1 -p tcp --dport 25 -j SNAT --to-source 10.0.0.1
echo "1" > /proc/sys/net/ipv4/ip_forward1Help 2UnWrap 3Quit 4Hex 5Line 6RxSrch 7Search 8Raw 9Unform