Назад | Перейти на главную страницу

Несколько IP, один интерфейс - Как настроить исходящее соединение с разными IP?

Я настроил eth0 с 8 IP, также добавил правильный виртуальный хост в apache для разных IP, и все работает почти нормально. Когда скрипт (например, PHP, ruby), запущенный apache2, пытается установить исходящее соединение (через cURL), он использует IP по умолчанию eth0: 0, не связанный с доменом (и входящим запросом). Я пытаюсь использовать что-то подобное

iptables -t nat -A POSTROUTING -s 192.168.1.202 -o eth0 -j SNAT --to 99.99.99.244
iptables -t nat -A POSTROUTING -s 192.168.1.202 -o eth0 -j SNAT --to 99.99.99.245
iptables -t nat -A POSTROUTING -s 192.168.1.202 -o eth0 -j SNAT --to 99.99.99.247
iptables -t nat -A POSTROUTING -s 192.168.1.202 -o eth0 -j SNAT --to 99.99.99.246

Вы можете использовать --interface переключитесь на cURL, чтобы указать, какой интерфейс он использует, но вам нужно самостоятельно решить, какой интерфейс использовать, и передать его как параметр из вашего скрипта

--interface Выполнять операцию с использованием указанного интерфейса. Вы можете ввести имя интерфейса, IP-адрес или имя хоста. Пример может выглядеть так:

          curl --interface eth0:1 http://www.netscape.com/

         If this option is used several times, the last one will be used.

Это может немного усложнить ситуацию. Вам нужно изменить таблицу маршрутизации более сложным способом, чем route жестяная банка. Вместо этого вы можете использовать набор инструментов iproute2. Этот инструмент входит в стандартную комплектацию большинства основных дистрибутивов.

ip route change 0.0.0.0/0 dev eth0 src 1.2.3.4 via 1.2.3.1
          source address you want to use -^           ^
                                     default gateway -^