Почему не работает соединение с локального хоста ?

Возникла такая проблема:
Есть адрес: мой_хост.ru
Определенные порты проксируются на виртуальные машины.

Если зайти по url мой_хост.ru:8083
Welcome to socket.io.

Если я напишу вот такой код на стороннем сервере (например у себя на локалке)
function get_content($url)
    {
        $ch = curl_init();
    
        curl_setopt ($ch, CURLOPT_URL, $url);
        curl_setopt ($ch, CURLOPT_HEADER, 0);
    
        ob_start();
    
        curl_exec ($ch);
        curl_close ($ch);
        $string = ob_get_contents();
    
        ob_end_clean();
       
        return $string;    
    }
    
    echo get_content('мой_хост.ru:8083');


Все работает, я увижу свою строку Welcome to socket.io.

НО если я напишу этот код на сервере где стоит мой сайт с хостом мой_хост.ru я получу false.

В общем ситуация такая, что сервер не может прочитать данные самого себя, как то так.

Подскажите пожалуйста в чем может быть проблема ?
  • Вопрос задан
  • 2814 просмотров
Решения вопроса 1
Смоделировал у себя на сервере.
При запросе по имени текущего хоста запрос идет не по eth0, а по lo (спасибо, tcpdump)
Для лупбака не работают PREROUTING (спасибо serverfault.com)

Таким образом, для работы курла по локальному адресу, надо в IPTABLES добавить, (для 8083 к примеру)
-I OUTPUT -p tcp -o lo --dport 8083 -j DNAT --to-destination 192.168.1.124:8083

т.е.
iptables -t nat -I OUTPUT -p tcp -o lo --dport 8083 -j DNAT --to-destination 192.168.1.124:8083
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@inDeepCode
мб ты его на индекс вешаешь, и он в рекурсию падает?
Ответ написан
Комментировать
nepster-web
@nepster-web Автор вопроса
hostname && printf "\n\n" && cat /etc/hosts && printf "\n\n" && iptables-save > /tmp/ipt && cat /tmp/ipt

127.0.0.1 localhost
мой айпи, провайдер, все дела

# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

# Generated by iptables-save v1.4.14 on Mon Apr 28 12:37:08 2014
*filter
:INPUT ACCEPT [365791:134637737]
:FORWARD ACCEPT [327624:179575394]
:OUTPUT ACCEPT [341288:160694049]
COMMIT
# Completed on Mon Apr 28 12:37:08 2014
# Generated by iptables-save v1.4.14 on Mon Apr 28 12:37:08 2014
*mangle
:PREROUTING ACCEPT [693617:314244891]
:INPUT ACCEPT [365925:134653211]
:FORWARD ACCEPT [327624:179575394]
:OUTPUT ACCEPT [341417:160713451]
:POSTROUTING ACCEPT [669041:340288845]
COMMIT
# Completed on Mon Apr 28 12:37:08 2014
# Generated by iptables-save v1.4.14 on Mon Apr 28 12:37:08 2014
*nat
:PREROUTING ACCEPT [1969:131473]
:POSTROUTING ACCEPT [851:49148]
:OUTPUT ACCEPT [721:43393]
-A PREROUTING -i eth0 -p tcp -m tcp --dport 8081 -j DNAT --to-destination 192.168.1.121:8081
-A PREROUTING -i eth0 -p tcp -m tcp --dport 8082 -j DNAT --to-destination 192.168.1.121:8082
-A PREROUTING -i eth0 -p tcp -m tcp --dport 8083 -j DNAT --to-destination 192.168.1.124:8083
-A PREROUTING -i eth0 -p tcp -m tcp --dport 8084 -j DNAT --to-destination 192.168.1.124:8084
-A PREROUTING -i eth0 -p tcp -m tcp --dport 8089 -j DNAT --to-destination 192.168.1.122:8089
-A PREROUTING -i eth0 -p tcp -m tcp --dport 8321 -j DNAT --to-destination 192.168.2.121:8321
-A PREROUTING -i eth0 -p tcp -m tcp --dport 8322 -j DNAT --to-destination 192.168.2.122:8322
-A PREROUTING -i eth0 -p tcp -m tcp --dport 8323 -j DNAT --to-destination 192.168.2.123:8323
-A PREROUTING -i eth0 -p tcp -m tcp --dport 8324 -j DNAT --to-destination 192.168.2.124:8324
-A POSTROUTING -o eth0 -j MASQUERADE
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
# Completed on Mon Apr 28 12:37:08 2014
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы