Доброго времени суток.В сети 192.168.0.0/24 есть комп linux с openSUSE 11.
linux:# ifconfig
eth0 Link encap:Ethernet HWaddr 00:16:3E:02:2A:8C
inet addr:192.168.0.2 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3581483 errors:0 dropped:0 overruns:0 frame:0
TX packets:5154283 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3658642571 (3489.1 Mb) TX bytes:4061930207 (3873.7 Mb)# netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 192.168.0.10 0.0.0.0 UG 0 0 0 eth0192.168.0.10 - это ADSL модем в режиме роутера.
Поставил на linux squid+squidGuard в transparent mode
Включил forwarding и в iptables прописал:#Redirect HTTP to SQUID
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128При этом если на другом компе указать в качестве шлюза IP-шник linux, то можно пользоваться браузером.
Но этого маловато, хочу сделать полноценный NAT на linux, чтобы для локальных машин доступ был не только в WEB.
Пока нашел мануалы как настроить NAT на роутере с двумя сетевыми картами, одна из которых смотрит в локальную сеть, а вторая - в Интернет.
Но у меня другая ситуация - карточка тока одна.
Поэтому прошу совета - как мне настроить NAT в моей ситуации.
>[оверквотинг удален]
>то можно пользоваться браузером.
>
>Но этого маловато, хочу сделать полноценный NAT на linux, чтобы для локальных
>машин доступ был не только в WEB.
>
>Пока нашел мануалы как настроить NAT на роутере с двумя сетевыми картами,
>одна из которых смотрит в локальную сеть, а вторая - в
>Интернет.
>Но у меня другая ситуация - карточка тока одна.
>Поэтому прошу совета - как мне настроить NAT в моей ситуации.man iptables
find POSTROUTING
find masquerade
)
если не трудно - то напишите пример.
у меня пока не получается разобраться самому.. потому и написал сюда.сбивает с толку что у меня и на ADSL модеме тоже ведь стоит NAT. Получается я хочу поставить перед ним еще один.
А про опцию MASQUERADE вобще вычитал что она должна использоваться только в случае с динамическим IP:
MASQUERADE
This target is only valid in the nat table, in the POSTROUTING chain. It should only be used with dynamically assigned IP (dialup) connections: if you have a static IP address, you should use the SNAT target.Вот и хочу узнать - как бы сделали в этом случае знающие люди..
>[оверквотинг удален]
>А про опцию MASQUERADE вобще вычитал что она должна использоваться только в
>случае с динамическим IP:
>MASQUERADE
>This target is only valid in the nat table, in the POSTROUTING
>chain. It should only be used with dynamically assigned IP (dialup)
>connections: if you have a static IP address,
>you should use the SNAT target.
>
>Вот и хочу узнать - как бы сделали в этом случае знающие
>люди..http://www.opennet.me/docs/RUS/iptables/#MASQUERADETARGET
Знающие , использовали бы заранее подготовленные скрипты. )
>http://www.opennet.me/docs/RUS/iptables/#MASQUERADETARGET
>
>Знающие , использовали бы заранее подготовленные скрипты. )спасибо. это я тоже уже читал..
вот что у меня сейчас - скопировал почти все откудато с инета и поправил, кстати, благодаря вашей наводке на man iptables ).# cat /etc/iptables.sh
#!/bin/sh
PATH=/usr/sbin:/sbin:/bin:/usr/bin
#
# Delete all rules
#
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
# Always accept the traffic on the loopback-interface
iptables -A INPUT -i lo -j ACCEPT# Masquerade.
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE#Redirect HTTP to SQUID
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128работает в принципе.. делает то что хотелось.. но както.. не нравится мне..
разве так должна выглядеть таблица правил iptables ?Опять же, непонятно осталось с маскарадингом и динамическими IP. Вроде для моего случая man советует SNAT.. Или я чтото не так понял.
и еще есть один вопрос:
каким правилом я могу запрещать доступ к этому "недо-NAT" для выбранного локального IP ?
но при этом, чтобы WEB через squid у него продолжал работать..
>и еще есть один вопрос:
>каким правилом я могу запрещать доступ к этому "недо-NAT" для выбранного локального
>IP ?
>но при этом, чтобы WEB через squid у него продолжал работать..А может вам таки следует настроить НАТ на АДСЛ рутере ? Или купить пачкорд и сетевушку, и сделать из линукса нормальный гейтвэй, а не кхм... даже и не знаю как ЭТО назвать.
>А может вам таки следует настроить НАТ на АДСЛ рутере ? Или
>купить пачкорд и сетевушку, и сделать из линукса нормальный гейтвэй, а
>не кхм... даже и не знаю как ЭТО назвать.NAT на ADSL есть. Но настройки в его WEB-интерфейсе весьма ограничены, а то, что можно сделать в iptables через консоль - после рестарта не сохраняется.
А так - обязательно приму все к сведению и в ближайшем будущем переделаю все нормально.И на данный момент вроде решил свои вопросы так:
#
# Delete all rules
#
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
# Always accept the traffic on the loopback-interface
iptables -A INPUT -i lo -j ACCEPT# Full access.
iptables -A FORWARD -s 192.168.0.100 -j ACCEPT# Allow access from LAN network to external Internet services.
iptables -A FORWARD -s 192.168.0.0/24 -p tcp --dport 110 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -p tcp --dport 25 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -p tcp --dport 443 -j ACCEPT# Disable access from LAN-network to external networks.
# ping
iptables -A FORWARD -s 192.168.0.0/24 -j REJECT
# HTTP
#iptables -A INPUT -s 192.168.0.0/24 -j REJECT# ############### NAT ###############
# Masquerade.
#iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE# Or SNAT.
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to-source 192.168.0.2
# ####################################Redirect HTTP to SQUID
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128таким образом все с локальной сети могут бродить по WEB за счет squid (https - через NAT)
и пользоваться внешними сервисами POP3 и SMTP.
есть одна проблема..
выходит у меня для выхода в инет, пакеты с локальной сети проходят ДВА NAT-а...
один на linux, второй на ADSL модеме.Видимо поэтому не открывается один сайт по https...
в других вариантах, также и просто через прокси, но непрозрачный - сайт работает..
но только не через эти два NAT-а.
не пойму как промониторить на чем возникает ошибка..
немного разобрался# Disable access from LAN-network to external networks.
# ping
iptables -A FORWARD -s 192.168.0.0/24 -j REJECTесли закоментировать эту строку - то проблемный сайт открывается.
но я ее добавил для того чтобы с локальной сети не было доступа к инету через НАТ через все порты кроме 110, 25 и 443.. видимо я закрыл какой-то нужный порт, раз при этом правиле не работает https на один URL (я подозреваю что могут быть и другие..)
вот что показывает iptables -nL
# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0Chain FORWARD (policy ACCEPT)
target prot opt source destinationACCEPT tcp -- 192.168.0.0/24 0.0.0.0/0 tcp dpt:110
ACCEPT tcp -- 192.168.0.0/24 0.0.0.0/0 tcp dpt:25
ACCEPT tcp -- 192.168.0.0/24 0.0.0.0/0 tcp dpt:443
REJECT all -- 192.168.0.0/24 0.0.0.0/0 reject-with icmp-port-unreachableChain OUTPUT (policy ACCEPT)
target prot opt source destination
возможно дело в этом "eject-with icmp-port-unreachable" ?
да, SNAT вам нужен :) но и маскарадинг работает :)
а чем плохо если линукс работает как рутер - просто пересылает пакеты на АДСЛ рутер? зачем второй нат?
>а чем плохо если линукс работает как рутер - просто пересылает пакеты
>на АДСЛ рутер? зачем второй нат?на linux также работает squid, и хочется более гибко управлять доступом к инету из локалки.
>>а чем плохо если линукс работает как рутер - просто пересылает пакеты
>>на АДСЛ рутер? зачем второй нат?
>
>на linux также работает squid, и хочется более гибко управлять доступом к
>инету из локалки.что именно вам надо от "более гибко управлять доступом к инету" и что требует двойного нат'а?
имхо проще, на linux-тачке оставить squid и не парить мозги с iptables'ами, причины следующие:
ограничивать доступ в веб, можно средствами сквида (acl)
какой в этом смысл в НАТе??? ведь сквид пересылает запросы в инет, подставляя свой собственный адрес.
Вобще почитайте зачем и для чего нужен НАТ.
>Но этого маловато, хочу сделать полноценный NAT на linux, чтобы для локальных машин доступ был не только в WEB
>какой в этом смысл в НАТе??? ведь сквид пересылает запросы в инет,
>подставляя свой собственный адрес.
>Вобще почитайте зачем и для чего нужен НАТ.йад в студию :)
Коллеги !
Спасибо вам за ваши советы и предложения как лучше можно сделать в моем случае.
В будущем я обязательно все переделаю в другом виде. Как минимум добавлю второй интерфейс.
А сейчас я хочу разобраться именно в этой, текущей проблеме.Мне кажеться картина совершенно прозрачная. Я уже описывал этот участок сети, попробую еще раз, другими словами и проще:
Есть свич, в него подключен ADSL модем (router mode), linux server (одна сетевуха - 192.168.0.2) и несколько рабочих компов (локальная сеть). Сеть - 192.168.0.0/24
на linux стоит squid+статистика. Squid в прозрачном режиме.
Я хочу чтобы рабочие компы ходили в инет через linux сервер.
для этого на linux включена маршрутизация и добавлены правила iptables:# vi /etc/iptables.sh
#!/bin/sh
PATH=/usr/sbin:/sbin:/bin:/usr/bin
# очистка старых правил
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
# Always accept the traffic on the loopback-interface
iptables -A INPUT -i lo -j ACCEPT# принимать все пакеты со стороны локальной сети для выбранного IP
iptables -A FORWARD -s 192.168.0.112 -j ACCEPT# доступ к pop3, smtp и https из локальной сети
iptables -A FORWARD -s 192.168.0.0/24 -p tcp --dport 110 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -p tcp --dport 25 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -p tcp --dport 443 -j ACCEPT# Закрыть доступ из локальной сети на все остальные порты
# ping
iptables -A FORWARD -s 192.168.0.0/24 -j REJECT# Закрыть доступ из локальной сети для пакетов от сервиса Squid
# HTTP
#iptables -A INPUT -s 192.168.0.0/24 -j REJECT# пример: полностью закрыть доступ в инет для 192.168.0.117
#iptables -A FORWARD -s 192.168.0.117 -d 0.0.0.0/0 -j REJECT
#iptables -A INPUT -s 192.168.0.117 -j REJECT# ############### NAT ###############
# Masquerade.
#iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE# Or SNAT.
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to-source 192.168.0.2
# ####################################Redirect HTTP to SQUID
iptables -t nat -A PREROUTING -i eth0 -p tcp -d ! 192.168.0.2 --dport 80 -j REDIRECT --to-port 3128
# ###################################Таким образом я получил на linux NAT + правило для пакетов с портом назначени = 80, которое заворачивает эти пакеты на локальный интерфейс:порт 3128б на котором слушает squid - локальный демон.
Правильно ? Или нет ?
Видимо не совсем правильно все написано, потому что с локальной сети не открывается один сайт по https. Ошибка в таймауте.
!НО! только я убираю вот эту строку:# Закрыть доступ из локальной сети на все остальные порты
# ping
iptables -A FORWARD -s 192.168.0.0/24 -j REJECTсайт начинает работать ! Следовательно проблема не в том, что в цепочке ДВА NAT-а и не в редиректе на порт 3128 http запросов (это ведь https запрос и он, в случае, когда squid работает в прозрачном (transparent)режиме, проходит через NAT, а не через squid)
Проблема в чем то другом... наверно когда я убираю эту строку - я открываю полный доступ через NAT для всей сети, и при этом какие-то "пакетики" от компа на котором открывается неработающий https сайт пропускаются в инет и все работает.но я НЕ хочу, чтобы у локальных компов был ПОЛНЫЙ доступ к инету через этот NAT.
поэтому я снова добавляю строку# Закрыть доступ из локальной сети на все остальные порты
# ping
iptables -A FORWARD -s 192.168.0.0/24 -j REJECTи пытаюсь открыть ПОЛНЫЙ доступ только для отдельного IP-адреса, скажем 192.168.0.112
# принимать все пакеты со стороны локальной сети для выбранного IP
iptables -A FORWARD -s 192.168.0.112 -j ACCEPTказалось бы - все логично. для одного открыл, для всех - закрыл.
Но.. сайт снова не работает. хотя с этого компа можно пинговать внешние ресурсы..
Вот я и не пойму в чем дело.
да ты сбрось все фаерфольные правила, и очисти нат-цепочки, и форвардинг выключи, у тебя фильтроваться все будет средствами сквида. Просто неправильно использовать 2 средства когда можно обойтись одним, т.е. сквидом. Извини но ты сам себе жизнь усложняешь.
>да ты сбрось все фаерфольные правила, и очисти нат-цепочки, и форвардинг выключи,
>у тебя фильтроваться все будет средствами сквида. Просто неправильно использовать 2
>средства когда можно обойтись одним, т.е. сквидом. Извини но ты сам
>себе жизнь усложняешь.если я так сделаю, то:
- на рабочих компах надо будет вручную настраивать прокси сервер в браузере, в аське и в подобных программах.
- почтовые клиенты сотрудников перестанут работать.
- пропадет удобствоили я не правильно тебя понял ?
>- на рабочих компах надо будет вручную настраивать прокси сервер в браузере,
>в аське и в подобных программах.это придется делать в любом случае, кроме тех когда прокси сервис (именно сервис) находится на шлюзе по умолчанию. (Представь ситуацию, Вася с компа обращается на ya.ru сначала идет запрос на днс сервер, указанный у васи, днс сервер если он находится в этой же локалке, возвращает адрес 213.180.204.8, браузер васи пупкина, ни чего незнает про сеть 213.180.204. и отправит запрос на шлюз по умолчанию. т.е. мимо прокси. Вывод если прокси и шлюз не находятся на одном ip адресе, то ip адрес прокси обязательно придется указывать в браузере у клиента)
>- почтовые клиенты сотрудников перестанут работать.
>- пропадет удобствопочтовые клиенты работаю точно также, как и браузер, и в сквиде по дефолту проксирование почтовых протоколов не выполняется.
>это придется делать в любом случае, кроме тех когда прокси сервис (именно
>сервис) находится на шлюзе по умолчанию.дык так и есть!
squid тоже на этом шлюзе !# Or SNAT.
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to-source 192.168.0.2
# ####################################Redirect HTTP to SQUID
iptables -t nat -A PREROUTING -i eth0 -p tcp -d ! 192.168.0.2 --dport 80 -j REDIRECT --to-port 3128я думал это понятно...
>[оверквотинг удален]
># Or SNAT.
>iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to-source
>192.168.0.2
># ###################################
>
>#Redirect HTTP to SQUID
>iptables -t nat -A PREROUTING -i eth0 -p tcp -d ! 192.168.0.2
>--dport 80 -j REDIRECT --to-port 3128
>
>я думал это понятно...а adsl модем какую роль играет?
iptables -A FORWARD -s 192.168.0.0/24 -j REJECTэто ответы от adsl рутера не режет, случаем?
www.fwbuilder.org
>iptables -A FORWARD -s 192.168.0.0/24 -j REJECT
>
>это ответы от adsl рутера не режет, случаем?
>
>www.fwbuilder.orgточно ! вот где была проблема.
Спасибо огромное ! сразу стало понятней.