Страница 1 из 1
внешние и внутренние IP адреса
Добавлено: 2009-10-12 11:19:22
chudinov
на сервере используются 7 IP адресов
содержимое rc.conf:
Код: Выделить всё
defaultrouter="89.188.108.197"
ifconfig_em0="inet 89.188.108.198 netmask 255.255.255.252"
ifconfig_em0_alias0="inet 217.65.6.145 netmask 255.255.255.255"
ifconfig_em0_alias1="inet 217.65.6.146 netmask 255.255.255.255"
ifconfig_em0_alias2="inet 217.65.6.147 netmask 255.255.255.255"
ifconfig_em0_alias3="inet 217.65.6.148 netmask 255.255.255.255"
ifconfig_em0_alias4="inet 217.65.6.149 netmask 255.255.255.255"
ifconfig_em0_alias5="inet 217.65.6.150 netmask 255.255.255.255"
Код: Выделить всё
# ifconfig
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=b<RXCSUM,TXCSUM,VLAN_MTU>
inet 89.188.108.198 netmask 0xfffffffc broadcast 89.188.108.199
inet 217.65.6.145 netmask 0xffffffff broadcast 217.65.6.145
inet 217.65.6.146 netmask 0xffffffff broadcast 217.65.6.146
inet 217.65.6.147 netmask 0xffffffff broadcast 217.65.6.147
inet 217.65.6.148 netmask 0xffffffff broadcast 217.65.6.148
inet 217.65.6.149 netmask 0xffffffff broadcast 217.65.6.149
inet 217.65.6.150 netmask 0xffffffff broadcast 217.65.6.150
ether 00:30:48:90:51:e2
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
em1: flags=8802<BROADCAST,SIMPLEX,MULTICAST> mtu 1500
options=b<RXCSUM,TXCSUM,VLAN_MTU>
ether 00:30:48:90:51:e3
media: Ethernet autoselect
status: no carrier
plip0: flags=108810<POINTOPOINT,SIMPLEX,MULTICAST,NEEDSGIANT> mtu 1500
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet 127.0.0.1 netmask 0xff000000
на каждом IP висит по одному домену. К сайтам можно обращаться как по домену так и по ip.
на сервере в работе используются php скрипты задача которых делать запросы с стороннему хосту и результат записывать в БД.
такие скрипты работают по cron на каждом таком сайте.
Проблема в том, что вне зависимости от того, на каком домене запускается скрипт, то внешний хост (к которому обращаются скрипты) определяет мой IP как 89.188.108.198
даже если на 89.188.108.198 нет ни одного сайта.
Грубо говоря, есть выполнить 217.65.6.145/test.php то для хоста к которому я обращаюсь мой хост определиться как 89.188.108.198
Один из админов сказал что это кривые настройки апача, но я пробовал выключать апач и запускать test.php из консоли - результат один, я для внешнего хоста представляюсь как один IP 89.188.108.198
Подскажите плиз, как настроить freebsd чтобы при выполнении php скрипта (который делает file_get_contents($request); на внешний хост) я представлялся именно тем IP на котором "физически лежит" php скрипт? т.е. если я запущу 217.65.6.145/test.php то для внешнего хоста я должен быть 217.65.6.145, а если запускаю на 217.65.6.150/test.php, то соответственно как 217.65.6.150
Re: внешние и внутренние IP адреса
Добавлено: 2009-10-12 11:26:37
terminus
Код: Выделить всё
defaultrouter="89.188.108.197"
ifconfig_em0="inet 89.188.108.198 netmask 255.255.255.252"
ifconfig_em0_alias0="inet 217.65.6.145 netmask 255.255.255.255"
ifconfig_em0_alias1="inet 217.65.6.146 netmask 255.255.255.255"
ifconfig_em0_alias2="inet 217.65.6.147 netmask 255.255.255.255"
ifconfig_em0_alias3="inet 217.65.6.148 netmask 255.255.255.255"
ifconfig_em0_alias4="inet 217.65.6.149 netmask 255.255.255.255"
ifconfig_em0_alias5="inet 217.65.6.150 netmask 255.255.255.255"
почему у вас алиасы не из того же диаразона что и основной адрес?
Re: внешние и внутренние IP адреса
Добавлено: 2009-10-12 12:07:01
Sadok123
terminus писал(а):Код: Выделить всё
defaultrouter="89.188.108.197"
ifconfig_em0="inet 89.188.108.198 netmask 255.255.255.252"
ifconfig_em0_alias0="inet 217.65.6.145 netmask 255.255.255.255"
ifconfig_em0_alias1="inet 217.65.6.146 netmask 255.255.255.255"
ifconfig_em0_alias2="inet 217.65.6.147 netmask 255.255.255.255"
ifconfig_em0_alias3="inet 217.65.6.148 netmask 255.255.255.255"
ifconfig_em0_alias4="inet 217.65.6.149 netmask 255.255.255.255"
ifconfig_em0_alias5="inet 217.65.6.150 netmask 255.255.255.255"
почему у вас алиасы не из того же диаразона что и основной адрес?
а какая разница? алиасы прописаны верно...
Re: внешние и внутренние IP адреса
Добавлено: 2009-10-12 12:16:36
terminus
непонятно как маршрутизация бедет работать при такой настройке.
если прописывается субнет отличный от того что на основном адартере то маски должны быть другими:
Код: Выделить всё
ifconfig_em0="inet 89.188.108.198 netmask 255.255.255.252"
ifconfig_em0_alias0="inet 217.65.6.145 netmask 255.255.255.0"
ifconfig_em0_alias1="inet 217.65.6.146 netmask 255.255.255.255"
ifconfig_em0_alias2="inet 217.65.6.147 netmask 255.255.255.255"
ifconfig_em0_alias3="inet 217.65.6.148 netmask 255.255.255.255"
ifconfig_em0_alias4="inet 217.65.6.149 netmask 255.255.255.255"
ifconfig_em0_alias5="inet 217.65.6.150 netmask 255.255.255.255"
Re: внешние и внутренние IP адреса
Добавлено: 2009-10-12 13:51:18
skeletor
согласен с terminus, маски как-то не соответствуют действительности.
Re: внешние и внутренние IP адреса
Добавлено: 2009-10-12 14:30:58
vadim64
на каждом IP висит по одному домену. К сайтам можно обращаться как по домену так и по ip.
Я думаю нужно чтобы автор уточнил, что именно он подразумевает под словом "домен" , и чтобы он посмотрел в сторону VirtualHosts.
Для апача 1.3
Код: Выделить всё
$ tail -31 /usr/local/etc/apache/httpd.conf
### Section 3: Virtual Hosts
#
# VirtualHost: If you want to maintain multiple domains/hostnames on your
# machine you can setup VirtualHost containers for them. Most configurations
# use only name-based virtual hosts so the server doesn't need to worry about
# IP addresses. This is indicated by the asterisks in the directives below.
#
# Please see the documentation at <URL:http://www.apache.org/docs/vhosts/>
# for further details before you try to setup virtual hosts.
#
# You may use the command line option '-S' to verify your virtual host
# configuration.
#
# Use name-based virtual hosting.
#
#NameVirtualHost *:80
#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for requests without a known
# server name.
#
#<VirtualHost *:80>
# ServerAdmin webmaster@dummy-host.example.com
# DocumentRoot /www/docs/dummy-host.example.com
# ServerName dummy-host.example.com
# ErrorLog logs/dummy-host.example.com-error_log
# CustomLog logs/dummy-host.example.com-access_log common
#</VirtualHost>
$
Не уверен, но можно попробывать реализовать поставленную задачу в границах httpd.conf
Re: внешние и внутренние IP адреса
Добавлено: 2009-10-12 14:31:03
hizel
а что вы паритесь?
у прова скажем написанно
и все в норме у топикстартера
что касается php скриптов , то если они биндятся на INADDR_ANY то берется первый попавшийся, скорее всего адрес в сторону дефолта
Re: внешние и внутренние IP адреса
Добавлено: 2009-10-12 15:01:45
chudinov
в настрйках апача VirtualHost указаны IP адреса для каждого домена.
Повторюсь, если апач остановлен, скрипт запускаю по ssh и результат тот же
настройки httpd.conf не влияют на процесс
Re: внешние и внутренние IP адреса
Добавлено: 2009-10-12 15:12:04
vadim64
на сервере в работе используются php скрипты задача которых делать запросы с стороннему хосту и результат записывать в БД.
такие скрипты работают по cron на каждом таком сайте.
А можно попросить cat /etc/crontab и пример листинга того как скрипт подключается к базе на удалённом хосте?
Re: внешние и внутренние IP адреса
Добавлено: 2009-10-13 8:35:34
chudinov
скрипт не подключается, а только делает запрос $response = file_get_contents('
http://xmlsearch.yandex.ru/xmlsearch', true, $context);
вот пример от Яндекс (
http://xml.yandex.ru/games/search-place-php.html)
Код: Выделить всё
<?php
// Для запуска требуется PHP 5
header ("Content-Type: text/html;charset=utf-8");
// верхняя части страницы
include "template_header.html";
# обработка полей формы
$host = array_key_exists('host', $_REQUEST) ? $_REQUEST['host'] : '';
$query = array_key_exists('query', $_REQUEST) ? $_REQUEST['query'] : '';
$query_esc = htmlspecialchars($query);
$host_esc = htmlspecialchars($host);
$host = preg_replace("[^http://|www\.]", '', $host);
// спрашивать яндекс только после сабмита формы
$exit = $_SERVER["REQUEST_METHOD"] != 'POST';
$page = 0;
$found = 0;
$pages = 50;
$error = false;
print "<table width='100%'><tr><td width='16%'/><td>";
// мы должны получить место сервера в выдаче по некому запросу.
// делаем запрос по десять ссылок на страницу и запрашиваем 50
// страниц. при нахождении сервера останавливаемся и выдаем его
// место в выдаче
while (!$exit && $page < $pages && $host)
{
// XML запрос
$doc = <<<DOC
<?xml version='1.0' encoding='utf-8'?>
<request>
<query>$query_esc</query>
<page>$page</page>
<maxpassages>0</maxpassages>
<groupings>
<groupby attr='d' mode='deep' groups-on-page='10' docs-in-group='1' curcateg='-1'/>
</groupings>
</request>
DOC;
$context = stream_context_create(array(
'http' => array(
'method'=>"POST",
'header'=>"Content-type: application/xml\r\n" .
"Content-length: " . strlen($doc),
'content'=>$doc
)
));
$response = file_get_contents('http://xmlsearch.yandex.ru/xmlsearch', true, $context);
if ( $response ) {
// print $response->getBody();
$xmldoc = new SimpleXMLElement($response);
$xmlresponce = $xmldoc->response;
if ($xmlresponce->error) {
print "Возникла следующая ошибка: " . $xmlresponce->error . "<br/>\n";
$exit = 1;
$error = true;
break;
}
$pos = 1;
$nodes = $xmldoc->xpath('/yandexsearch/response/results/grouping/group/doc/url');
foreach ($nodes as $node) {
// если URL начинается с имени хоста, выходим из цикла
if ( preg_match("/^http:\/\/(www\.)?$host/i", $node) ) {
$found = $pos + $page * 10;
$exit = 1;
break;
}
$pos++;
}
$page++;
} else {
print "внутренняя ошибка сервера\n";
$exit = 1;
}
}
if (!$error) {
// если что-то найдено, то выводим результат
if ($found) {
print "<p>сайт «$host» находится на месте № $found по запросу «$query»</p>";
print "<p>Попробуйте узнать позицию другого сайта!</p><br/>\n";
} elseif ($host) {
print "<p>сайт «$host» находится далее, чем на ". $pages*10 ." месте в выдаче «Яндекса»";
print" по запросу «$query»</p><p>Попробуйте узнать позицию другого сайта!</p><br/>\n";
} else {
print "<p>Узнайте позицию сайта в выдаче «Яндекса» по запросу!</p>";
}
}
?>
</td></tr></table>
<form method='POST' accept-charset='utf-8'>
<table width='100%'>
<tr>
<td width="16%"/>
<td width="75%">
<table>
<tr>
<td><label for='query'>Запрос:</label></td>
<td><input type='text' name='query' id='query' value='<?php print $query_esc ?>'/> Пример: волшебные травы</td>
</tr>
<tr>
<td><label for='host'>Имя сервера:</label></td>
<td><input type='text' name='host' id='query' value='<?php print $host_esc ?>'/> Пример: narcom.ru</td>
</tr>
<tr>
<td/>
<td><input type="submit" value="Искать!"/></td>
</tr>
</table>
</td>
<td width="9%">
</tr>
</table>
</form>
<?php
// дописываем html
include "template_footer.html";
?>
Re: внешние и внутренние IP адреса
Добавлено: 2009-10-13 11:46:02
sch
Очевидно же, что исходящие пакеты с сервера направляются через дефолтный шлюз провайдера -- поэтому они отправляются от адреса сервера, находящегося в такой же IP подсети.
Настройки приложений не при чем.
Re: внешние и внутренние IP адреса
Добавлено: 2009-10-13 12:25:35
Gloft
Попробуй запустить апач на отдельный ип.
То-есть для каждого домена свой апач, возможно это поможет.
Насколько я понимаю у тебя сейчас на одном апаче висит несколько виртуал хостов, и в апаче прописано слушать несколько ипов.
Re: внешние и внутренние IP адреса
Добавлено: 2009-10-13 13:54:30
vadim64
chudinov писал(а):в настрйках апача VirtualHost указаны IP адреса для каждого домена.
Повторюсь, если апач остановлен, скрипт запускаю по ssh и результат тот же
настройки httpd.conf не влияют на процесс
Пишет же человек, апач не приделах. Это надо пых-программиста какого нибудь заставить расказать о том как работает пых-скрипты соединяются с внешним миром и как можно повлиять на этот процесс.
Re: внешние и внутренние IP адреса
Добавлено: 2009-10-13 14:11:16
Nickuz
Топикстартер, у вас должно быть выполнено два условия:
1. Для каждого алиаса должен существовать хотя бы один роутер, который "знает" маршрут до ваших алиасов.
2. Должен быть обеспечен форвардинг пакетов с алиаса на рутер.
После этого можете привязывать исходящий интерфейс в пхп.
Re: внешние и внутренние IP адреса
Добавлено: 2009-10-14 16:58:43
chudinov
Nickuz, поясните плиз
это как сделать?
точнее это я настрою на своем сервере или это должны настроить сисадмины моего хостера где сервер на колокейшене стоит?