Iptables+NAT доступ к вебсерверу из тойже локальной сети, Yukko, 10-Окт-04, 04:28 [смотреть все]Ткните носом... Есть линукс ASP 7.3 одним интерфейсом 213.227.206.32(eth0) смотрит в инет, другим 10.5.1.8 (eth1) в локалку. Внутри локалки есть вебсервер 10.5.1.5. Он через DNAT выкинут наружу с адресом 213.227.206.30. При заходе из инета на адрес вебсервера, все ОК, но я хочу большего, а именно заходить на свой же вебсервер из той самой локальной сети, в которой находится вебсервер. Читаю ман по IPTables, гуглю и яндексю уже третий день, но, видимо, где-то зациклился.Привожу скрипт, которым делаю вышеперчисленные действия и сразу пишу, как я это понимаю, чтобы могли указать, где я неправ в своих размышлениях: #!/bin/bash #установка политики FORWARD по-умолчанию в DROP, т.е. все что не #разрешено явно, то запрещено /sbin/iptables -P FORWARD / DROP #я своей локалке доверяю, поэтому разрешаю прохождение пакетов из локалки #без ограничений /sbin/iptables -A FORWARD -i eth1 -o eth0 / -j ACCEPT #пропускаю внутрь локалки пакеты установленных #соединений /sbin/iptables -A FORWARD -i eth0 -o eth1 -m state --state / ESTABLISHED,RELATED -j/ ACCEPT #Я разрешаю прохождение всех пакетов, которые приходят на вебсервер с #внешнего интерфейса файрвола на локальный интерфейс вебсервера. /sbin/iptables -A FORWARD -d 10.5.1.5 -i eth0 -o eth1 -p tcp / -m tcp --dport 80 / -j/ allowed #выкидываю все открытые порты машины в инет с адресом 213.227.206.30 /sbin/iptables -t nat -A PREROUTING -d 213.227.206.30 / -i eth0 -p tcp -m tcp -j DNAT --to-destination / 10.5.1.5 #даю доступ в интернет приложениям моей машины с адреса 213.227.206.30 #т.е. переписываю адрес источника на внешний присвоенный адрес. /sbin/iptables -t nat -A POSTROUTING -s 10.5.1.5 / -o eth0 -j SNAT --to-source / 213.227.206.30 #теперь согласно написанного в мануале, мне надо сделать нижеприведенное, #смысл которого я понимаю (надо переписать исходящий адрес с адреса #клиента на адрес файрвола, чтобы вебсервер ответил файрволу,а не клиенту #напрямую): iptables -t nat -A POSTROUTING -p tcp --dst 10.5.1.5 --dport 80 -j SNAT \ --to-source 10.5.1.8 Команда выполняется, но - при попытке доступа из той же локальной сети соединение установить не удается - все приложения, которые крутятся на вебсервере стали видеть $_SERVER['REMOTE_ADDRESS'] (адрес клиента) как внутренний адерс файрвола Я подозреваю, что я а. где-то не разрешил прохождение пакетов с адресом источника из локальной сети на внешний интерфейс, а потом обратно. б. неправильно написал правила SNAT |
- Iptables+NAT доступ к вебсерверу из тойже локальной сети, fantom, 17:45 , 11-Окт-04 (1)
>Ткните носом... Есть линукс ASP 7.3 одним интерфейсом 213.227.206.32(eth0) смотрит в инет, >другим 10.5.1.8 (eth1) в локалку. >Внутри локалки есть вебсервер 10.5.1.5. Он через DNAT выкинут наружу с адресом >213.227.206.30. При заходе из инета на адрес вебсервера, все ОК, но >я хочу большего, а именно заходить на свой же вебсервер из >той самой локальной сети, в которой находится вебсервер. Читаю ман по >IPTables, гуглю и яндексю уже третий день, но, видимо, где-то зациклился. > > >Привожу скрипт, которым делаю вышеперчисленные действия и сразу пишу, как я это >понимаю, чтобы могли указать, где я неправ в своих размышлениях: > >#!/bin/bash >#установка политики FORWARD по-умолчанию в DROP, т.е. все что не >#разрешено явно, то запрещено >/sbin/iptables -P FORWARD / >DROP >#я своей локалке доверяю, поэтому разрешаю прохождение пакетов из локалки >#без ограничений >/sbin/iptables -A FORWARD -i eth1 -o eth0 / >-j ACCEPT >#пропускаю внутрь локалки пакеты установленных >#соединений >/sbin/iptables -A FORWARD -i eth0 -o eth1 -m state --state / >ESTABLISHED,RELATED -j/ >ACCEPT >#Я разрешаю прохождение всех пакетов, которые приходят на вебсервер с >#внешнего интерфейса файрвола на локальный интерфейс вебсервера. >/sbin/iptables -A FORWARD -d 10.5.1.5 -i eth0 -o eth1 -p tcp / > >-m tcp --dport 80 / >-j/ >allowed >#выкидываю все открытые порты машины в инет с адресом 213.227.206.30 >/sbin/iptables -t nat -A PREROUTING -d 213.227.206.30 / >-i eth0 -p tcp -m tcp -j DNAT --to-destination / >10.5.1.5 >#даю доступ в интернет приложениям моей машины с адреса 213.227.206.30 >#т.е. переписываю адрес источника на внешний присвоенный адрес. >/sbin/iptables -t nat -A POSTROUTING -s 10.5.1.5 / >-o eth0 -j SNAT --to-source / >213.227.206.30 >#теперь согласно написанного в мануале, мне надо сделать нижеприведенное, >#смысл которого я понимаю (надо переписать исходящий адрес с адреса >#клиента на адрес файрвола, чтобы вебсервер ответил файрволу,а не клиенту >#напрямую): >iptables -t nat -A POSTROUTING -p tcp --dst 10.5.1.5 --dport 80 -j >SNAT \ >--to-source 10.5.1.8 > >Команда выполняется, но >- при попытке доступа из той же локальной сети соединение установить не >удается >- все приложения, которые крутятся на вебсервере стали видеть $_SERVER['REMOTE_ADDRESS'] (адрес клиента) >как внутренний адерс файрвола > >Я подозреваю, что я >а. где-то не разрешил прохождение пакетов с адресом источника из локальной сети >на внешний интерфейс, а потом обратно. >б. неправильно написал правила SNAT Одного немогу понять - нафига такой гемор творить, если все в одной локалке??? 1. разреши к http серверу ходить по IP адресу, набираешь в строке адреса 10.5.1.5 и попадаешь на свой сервак... 2. или сделать чтобы твой DNS отдавал в локалку адрес 10.5.1.5 (или какой он там у тебя на серваке) о твоем серваке. а правило твое работать небудет, т.к. адреса из одной подсети, и при обращении с 10.5.1.х на 10.5.1.5 пакеты через твой шлюз НЕ ПРОХОДЯТ!
- Iptables+NAT доступ к вебсерверу из тойже локальной сети, Yukko, 17:52 , 11-Окт-04 (2)
>а правило твое работать небудет, т.к. адреса из одной подсети, и при >обращении с 10.5.1.х на 10.5.1.5 пакеты через твой шлюз НЕ ПРОХОДЯТ! Можно хотя объяснить почему они не проходят через шлюз? Читаю мануал, там сказано, что проходят: А теперь посмотрим, что произойдет, если запрос посылается с узла, расположенного в той же локальной сети. Для простоты изложения примем адрес клиента в локальной сети равным $LAN_BOX.Пакет покидает $LAN_BOX. Поступает на брандмауэр. Производится подстановка адреса назначения, однако адрес отправителя не подменяется, т.е. исходный адрес остается в пакете без изменения. Пакет покидает брандмауэр и отправляется на HTTP сервер. HTTP сервер, готовясь к отправке ответа, обнаруживает, что клиент находится в локальной сети (поскольку пакет запроса содержал оригинальный IP адрес, который теперь превратился в адрес назначения) и поэтому отправляет пакет непосредственно на $LAN_BOX. Пакет поступает на $LAN_BOX. Клиент "путается", поскольку ответ пришел не с того узла, на который отправлялся запрос. Поэтому клиент "сбрасывает" пакет ответа и продолжает ждать "настоящий" ответ. Проблема решается довольно просто с помощью SNAT. Ниже приводится правило, которое выполняет эту функцию. Это правило вынуждает HTTP сервер передавать ответы на наш брандмауэр, которые затем будут переданы клиенту. И дальше написано: Каждый должен понять, что эти правила предназначены только лишь для корректной обработки адресации пакетов. В дополнение к этим правилам вам может потребоваться написать дополнительные правила для цепочки FORWARD таблицы filter. Не забудьте при этом, что пакеты уже прошли цепочку PREROUTING и поэтому их адреса назначения уже изменены действием DNAT.
- Iptables+NAT доступ к вебсерверу из тойже локальной сети, Yukko, 00:49 , 12-Окт-04 (3)
- Iptables+NAT доступ к вебсерверу из тойже локальной сети, fantom, 12:16 , 12-Окт-04 (4)
Когда компы в одной подсети, общаются они напрямую, без участия шлюзов...Читал, думал... Сорри за категоричное сообщение по поводу правила, я забыл что DNS вернет не IP из локалки, а IP реальный, все действительно побежит через шлюз...
|