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
() автор топика
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.