LINUX.ORG.RU
ФорумAdmin

Apache2 + VirtualHosts + NAT


0

0

Здравствуйте. Наткнулся на следующую проблему. Что имеем: lan-0 - сеть 10.0.0.0/8 lan-1 - сеть 192.168.10.0/24

роутер 192.168.10.1 на базе debian eth0 10.103.254.5 eth1 192.168.10.1

На одной из машин внутри сети lan-1 располагается сервер apache2 с несколькими виртуальными name-based хостами.

Задача: сделать этот сервер видимым за NAT-ом в сети lan-0.

Пробовал напрямую пробрасывать порт через iptables - не получилось (возможно руки кривые). На торренты порт получилось пробросить легко.

Рассмотрю любые предложенные Вами варианты. По возможности расписывайте как можно подробнее. Заранее спасибо за помощь.

Покажи как прокидовал.

Valor
()

Завести на 192.168.10.1:80 апача и поднять на нём mod_proxy

saluki
()

1. Для апача пытался прокидывать так:
iptables -t nat -A prerouting_rule -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.10.10
iptables -A forwarding_rule -i eth0 -p tcp --dport 80 -d 192.168.10.10 -j ACCEPT

2. Не хочу грузить роутер апачем (пень2, 128мб оперы) ибо там и так висит уже немаленькая днска. Думаю что в таком случае, при использовании проксации, лучше уж поставить туда nginx

3. Пробрасывается, я ж говорю, что порты для торрента пробросил.

SkeLLLa
() автор топика
Ответ на: комментарий от tux2002

ну.. этому в моем случае есть много причин и главная, что доступно 3 айпи внешних, а надо 4-5.

SkeLLLa
() автор топика
Ответ на: комментарий от SkeLLLa

Покажите плз полный конфиг айпистолов.

nnz ★★★★
()
Ответ на: комментарий от nnz

root@cookie:~# iptables -t nat -vnL PREROUTING 
Chain PREROUTING (policy ACCEPT 272 packets, 22601 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    2   104 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpts:27030:27039 to:192.168.10.10 
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpts:27040:27049 to:192.168.10.104 
    2   190 DNAT       udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp dpts:27030:27039 to:192.168.10.10 
    0     0 DNAT       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80 to:192.168.10.10 
root@cookie:~# iptables -vnL FORWARD 
Chain FORWARD (policy ACCEPT 4356 packets, 4010K bytes)
 pkts bytes target     prot opt in     out     source               destination         
 284K   13M ACCEPT     all  --  eth0   eth1    0.0.0.0/0            0.0.0.0/0           
 701K 1045M ACCEPT     all  --  eth1   *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     all  --  eth1   *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     all  --  ppp0   eth0    0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
    0     0 ACCEPT     all  --  ppp0   eth0    0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
    0     0 ACCEPT     all  --  eth0   ppp0    0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            192.168.10.10       tcp dpt:80 
root@cookie:~# iptables --list-rules -t filter 
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i lo -j ACCEPT 
-A INPUT -i eth0 -j ACCEPT 
-A INPUT -i eth1 -j ACCEPT 
-A FORWARD -i eth0 -o eth1 -j ACCEPT 
-A FORWARD -i eth1 -j ACCEPT 
-A FORWARD -i eth1 -j ACCEPT 
-A FORWARD -i ppp0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A FORWARD -i ppp0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A FORWARD -i eth0 -o ppp0 -j ACCEPT 
-A FORWARD -d 192.168.10.10/32 -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT 
root@cookie:~# iptables --list-rules -t nat
-P PREROUTING ACCEPT
-P POSTROUTING ACCEPT
-P OUTPUT ACCEPT
-A PREROUTING -p tcp -m tcp --dport 27030:27039 -j DNAT --to-destination 192.168.10.10 
-A PREROUTING -p tcp -m tcp --dport 27040:27049 -j DNAT --to-destination 192.168.10.104 
-A PREROUTING -p udp -m udp --dport 27030:27039 -j DNAT --to-destination 192.168.10.10 
-A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.10.10 
-A POSTROUTING -o eth0 -j MASQUERADE 
-A POSTROUTING -o ppp0 -j MASQUERADE

SkeLLLa
() автор топика
Ответ на: комментарий от SkeLLLa

Ужжас. Вы так увлеклись разрешениями, что забыли запретить. В принципе, все правила, кроме nat, можете выкинуть - они ничего не фильтруют. Потому что во всех цепочках дефолтные правила и так ACCEPT.

А судя по счетчикам, по правилам ната для 80 порта ничего не проходило. Попытайтесь еще раз зайти на http://10.103.254.5/, например, браузером.

Кстати вы, кажется, говорил про name-based хосты. А на какой айпишник указывают эти имена? Должны указывать на 10.103.254.5, во всяком случае, для хостов из 10.0.0.0/8.

nnz ★★★★
()
Ответ на: комментарий от nnz

Согласен, что ужас. Разрешено - это временно, не переживайте потом все будет ок. Просто пока существует необходимость чтоб работало как можно больше при как можно меньших затратах времени на конфигурацию. На этом серваке у меня стоит и днс, так что имена указывают правильно на 10.103.254.5.

>А судя по счетчикам, по правилам ната для 80 порта ничего не проходило. Попытайтесь еще раз зайти на http://10.103.254.5/, например, браузером.

Вижу... Заходил несколько раз как по ай-пи, так и по servername-у.

SkeLLLa
() автор топика
Ответ на: комментарий от nnz

Итак еще некоторый отчет:
Если 80 порт попытаться прокинуть так же, как и для торрента например
(iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.10.10), то тогда очевидно у нас не будет возможности заходить на любые сайты по 80 порту

Если сделать так:
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 80 -j DNAT --to-destination 192.168.10.10
то по этому правилу не пройдет ни одного пакета.


Делаем грязный хак: переносим апач на 81 порт и добавляем
iptables -t nat -A PREROUTING -p tcp --dport 81 -j DNAT --to-destination 192.168.10.10

Теперь мы получаем, что по этому правилу пакеты идут, но только при попытке зайти по http://10.103.254.5:81/, что в общем то и не удивительно.

Может те, кто хорошо знаком с nginx-ом скажут можно ли его использовать, не только, как это обычно делают - в качестве фронт-енда для локального апача, а в качестве полноценного прокси для него. Буду очень благодарен, если поможете подробным описанием или ссылками на соответствующие ситуации маны.

SkeLLLa
() автор топика
Ответ на: комментарий от SkeLLLa

>iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 80 -j DNAT --to-destination 192.168.10.10

ммм... а если так?
iptables -t nat -A PREROUTING -p tcp -d 10.103.254.5 --dport 80 -j DNAT --to-destination 192.168.10.10

nnz ★★★★
()
Ответ на: комментарий от SkeLLLa

>не только, как это обычно делают - в качестве фронт-енда для локального апача, а в качестве полноценного прокси для него

Да там только адрес отличается :)
server {
    listen 10.103.254.5:80
    server_name  имя1 имя2 имя3;
    location / {
        proxy_pass http://192.168.10.10/;
        proxy_set_header Host $host;
    }
}

nnz ★★★★
()
Ответ на: комментарий от SkeLLLa

>Если сделать так:
>iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 80 -j DNAT --to-destination 192.168.10.10

>то по этому правилу не пройдет ни одного пакета.


Хммм... А вы случайно не с того же сервака и тестили? Ведь весь локальный трафик, независимо от айпишника, идет через интерфейс lo.

Имхо в данном случае правильнее матчить по --destination IP, а не по интерфейсу.

nnz ★★★★
()
Ответ на: комментарий от nnz

>Если сделать так: >iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 80 -j DNAT --to-destination 192.168.10.10 >то по этому правилу не пройдет ни одного пакета.

Теперь через эту цепочку пакеты проходят, но от апача никакой реакции.

>Хммм... А вы случайно не с того же сервака и тестили? Ведь весь >локальный трафик, независимо от айпишника, идет через интерфейс lo.

Тестил как с моего локального компа (где стоит апач), так и с компа в lan-1 (192.168.10.0), так и из 10.0.0.0.

SkeLLLa
() автор топика
Ответ на: комментарий от SkeLLLa

>Теперь через эту цепочку пакеты проходят, но от апача никакой реакции.

Т.е. вы поменяли -i на -d и счетчики начали крутиться? Тогда:
1. Убедитесь еще раз, что в FORWARD все разрешено (на всякий случай).
2. Можно добавить еще один чит-код
iptables -t nat -I POSTROUTING -d 192.168.10.10 -p tcp --dport 80 -j SNAT --to-source 192.168.0.1

nnz ★★★★
()
Ответ на: комментарий от nnz

>1. Убедитесь еще раз, что в FORWARD все разрешено (на всякий случай).

Это примерно так:
iptables -I FORWARD -p tcp -d 192.168.10.10 --dport 80 -j ACCEPT
безо всяких -i и -o

nnz ★★★★
()
Ответ на: комментарий от SkeLLLa

и вообще я в свое время написал неплохой (имхо) ман по нату в iptables: http://ru.wikipedia.org/w/index.php?title=Iptables&oldid=17938572#.D0.94.... В нашем случае интересен пункт про DNAT.
Возможно, найдете для себя что-нибудь интересное.

nnz ★★★★
()
Ответ на: комментарий от nnz

iptables -t nat -I POSTROUTING -d 192.168.10.10 -p tcp --dport 80 -j SNAT --to-source 192.168.0.1 помогло.

С внутренней сети заходит на оба хоста нормально, а с внешней (10.0.0.0) только на 1. В любом случае большое спасибо за помощь. Пойду наверно разбираться с nginxами :)

SkeLLLa
() автор топика
Ответ на: комментарий от SkeLLLa

>С внутренней сети заходит на оба хоста нормально, а с внешней (10.0.0.0) только на 1.

Наверное, я туплю... не понял, один хост 192.168.10.10, а кто второй?
Если не лень - опишите существующие на данный момент проблемы с натом.

nnz ★★★★
()
Ответ на: комментарий от nnz

На хосте 192.168.10.10 висить апач с name-based виртуальными хостами. из сети lan-1(192.168.10.0) видны оба виртуальных хоста (например): vhost1.somewhere.com и vhost2.somewhere.com А из сети 10.0.0.0 можно попасть только на vhost1.somewhere.com

vhost1.somewhere.com как и vhost2.somewhere.com имеют внешнее айпи (в 10.0.0.0), в моем случае это 10.103.254.5

SkeLLLa
() автор топика
Ответ на: комментарий от SkeLLLa

Ну это проблема уже не в пробросе, а в настройке апача.
Интересуют прежде всего блоки VirtualHost и директивы NameVirtualHost.

Ну еще возможны косяки с dns. Например, закешировался неправильный айпишник для второго вхоста. Советую посмотреть из "внешней" сети
host vhost1.somewhere.com
host vhost2.somewhere.com

nnz ★★★★
()
Ответ на: комментарий от nnz

косяков с днс быть не должно, ибо прописывал и свой dns и в hosts то, что надо.

это из /sites-avalible/default <VirtualHost *:80> ServerName vhost1.somewhere.com ServerAlias vhost1.lan DocumentRoot /var/www/hosts/vhost1.somewhere.com

<Directory /var/www/hosts/vhost1.somewhere.com> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> </VirtualHost>

<VirtualHost *:80> ServerName vhost2.somewhere.com ServerAlias vhost2.lan DocumentRoot /var/www/hosts/vhost2.somewhere.com

<Directory /var/www/hosts/vhost2.somewhere.com> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> </VirtualHost>

ports.conf: NameVirtualHost *:80 Listen 80

SkeLLLa
() автор топика
Ответ на: комментарий от SkeLLLa

Возможные варианты:
1. Браузер по какой-то причине не передает заголовок Host на сервер, либо передает в нем не то, что нужно. простите за глупый вопрос, вы из внешки по доменному имени на второй вхост заходите? И еще: тщательно убедитесь, что оно написано без ошибок (в идеале - скопипастить из конфига апача).
2. Все-таки косяк с днс. Рекомендую во время тестирования в соседней консоли подцепить по ссх сервер и смотреть tail -f /var/log/apache2/access.log. Если при попытках захода из внешки на второй вхост там появляются новые строчки - значит, косяк в поле Host. Если нет - значит, в днс.

nnz ★★★★
()
Ответ на: комментарий от SkeLLLa

sorry:
косяков с днс быть не должно, ибо прописывал и свой dns и в hosts то, что надо. 

это из /sites-avalible/default 
<VirtualHost *:80>
    ServerName vhost1.somewhere.com
    ServerAlias vhost1.lan
    DocumentRoot /var/www/hosts/vhost1.somewhere.com

   <Directory /var/www/hosts/vhost1.somewhere.com>
       Options Indexes FollowSymLinks MultiViews
       AllowOverride All 
       Order allow,deny allow from all 
   </Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerName vhost2.somewhere.com
    ServerAlias vhost2.lan
    DocumentRoot /var/www/hosts/vhost2.somewhere.com

   <Directory /var/www/hosts/vhost2.somewhere.com>
       Options Indexes FollowSymLinks MultiViews
       AllowOverride All 
       Order allow,deny allow from all 
   </Directory>
</VirtualHost>

ports.conf:
NameVirtualHost *:80
Listen 80 

SkeLLLa
() автор топика
Ответ на: комментарий от nnz

Все-таки оказались dns-ки виноваты :)... Еще раз Большое спасибо за помощь. В свободное время нужно будет накатать по сему небольшой мануал :).

SkeLLLa
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.