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

Указание IP-адреса для исходящих соединений на хосте с несколькими IP-адресами

один из моих серверов (Debian 5.0.6) имеет два публичных IP-адреса на одном интерфейсе. Раньше это работало месяцами, но внезапно для исходящих подключений используются «неправильные» IP-адреса. Это проблема, потому что обратный поиск не будет соответствовать, и поэтому электронные письма получают баллы за спам.

eth0      Link encap:Ethernet  Hardware Adresse 00:1b:21:14:8e:9c  
          inet Adresse:81.169.180.51  Bcast:81.169.180.51  Maske:255.255.255.255
          inet6-Adresse: fe80::21b:21ff:fe14:8e9c/64 Gültigkeitsbereich:Verbindung

eth0:0    Link encap:Ethernet  Hardware Adresse 00:1b:21:14:8e:9c  
          inet Adresse:85.214.157.120  Bcast:85.214.157.120  Maske:255.255.255.255


Kernel-IP-Routentabelle
Destination     Router          Genmask         Flags Metric Ref    Use Iface
81.169.180.1    0.0.0.0         255.255.255.255 UH    0      0        0 eth0
0.0.0.0         81.169.180.1    0.0.0.0         UG    0      0        0 eth0

В настоящее время для исходящих подключений используется 85.214.157.120. Как заставить его использовать 81.169.180.51?

редактировать: Сетевая маска 255.255.255.255 согласуется как с документацией, так и с ответом DHCP хостинговой компании. Многократный вызов /etc/init.d/networking restart в конечном итоге приведет к получению правильного IP-адреса для исходящих подключений. Но это явно нестабильное решение. /Редактировать

Редактировать 2: Чтобы убедиться, что маршрут хоста не связан с моей проблемой, я настраиваю локальную тестовую сеть:

eth0      inet Adresse:192.168.0.2  Bcast:192.168.0.255  Maske:255.255.255.0
eth0:0    inet Adresse:192.168.0.3  Bcast:192.168.0.255  Maske:255.255.255.0

192.168.0.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0
0.0.0.0        192.168.0.1     0.0.0.0         UG    0      0        0 eth0

Если у кого-то есть идея, как убедиться, что исходный IP-адрес 192.168.0.2 используется для исходящих TCP-соединений, я был бы благодарен. / Редактировать 2

Обновить по умолчанию:

ip route change default via 81.169.180.1 src 81.169.180.51

Проверить конфигурацию:

ip route list

Ответ bindbn хорош, но я обнаружил некоторые сложности.

1) Вы должны проверить "список IP-маршрутов", как говорит bindbn. Другое правило в списке может иметь приоритет над маршрутом по умолчанию. Возможно, вам потребуется удалить это правило или создать немного другое правило.

2) Все изменения, сделанные с помощью команды ip, действуют только до следующей перезагрузки. Этот ответ Постоянное добавление правил маршрутизации исходной политики объясняет, как сделать это постоянным.

Таким образом, вы можете добавить команду ip route, которую нужно запускать как строку «вверх» или «после», в / etc / network / interfaces. Вы можете добавить соответствующую строку «вниз», чтобы удалить маршрут.

Попробуйте изменить

 allow-hotplug eth0

к

 auto eth0

Это должно заставить работать ваш физический интерфейс первым. Вам может потребоваться, а может и не потребоваться изменить запись allow-hotplug для eth0: 0.

Из любопытства, почему у ваших IP-адресов сетевая маска 255.255.255.255? Это действительно невозможно, так как это будет означать, что весь адрес является сетью. Нет места для хозяев. Тот факт, что ваш широковещательный адрес совпадает с IP-адресом вашего хоста, также вызывает беспокойство, но, вероятно, из-за проблемы с сетевой маской. Похоже, ваша сетевая маска должна быть 255.255.255.0.

Было ли это сделано для того, чтобы предоставить вам два хоста в одной подсети? Может быть предпочтительнее просто внести изменения, чтобы каждый интерфейс находился в отдельной подсети. 255.255.255.128 поместит eth0 и ваш шлюз (81.169.180.1) в одну подсеть, а eth0: 0 - в отдельную подсеть. Однако это будет означать, что eth0 может связываться только с 81.169.180.1-81.169.180.127. И eth0: 0 идет с 129 по 254. Но при этом я не понимаю, почему ваша текущая установка вообще работает.

Теперь, вызовет ли это проблемы, которые вы видите выше? Я не вижу прямой ссылки, но это возможно.
Я бы определенно это поправил. Если это не поможет, возможно, вы объясните, почему у вас все устроено именно так.


Редактировать: Was this working fine on this host, or was it a different machine/OS? Any idea what might have changed? The reason I ask is because Linux really doesn't like to have two interfaces on the same subnet. It's driven me mad trying to get this working on my own network. It sounds quite possible that you got this working on the right IP, up until you rebooted/restarted network services. Then it came up using the wrong interface. Reference: http://anders.com/cms/258

Вы также можете попробовать ifdown на eth0: 0, затем добавляем маршрут, затем ifupназад. Это может гарантировать использование правильного IP.

Добавление вручную dev eth0 мощь help, но похоже, что маршрут проложен правильно.


Дальнейшее редактирование: You might try using the newest IP management tools in Debian, iproute 2. (Вторичная ссылка) It looks like something along the lines of
Bringin up the interface: ip link set eth0 up

ip addr add 192.168.0.2/24 dev ethe0
ip addr add 192.168.0.3/24 dev eth0

Затем настройте таблицу маршрутизации с помощью
ip route add 10.0.0.0/16 via 192.168.0.2


- Кристофер Карел

Ваша текущая настройка вообще не должна работать. Поскольку сетевая маска для обоих интерфейсов - 255.255.255.255, для шлюза нет места. Однако для доставки любого значимого трафика вашему серверу нужен шлюз. Интернет-провайдер, предоставляющий два общедоступных IP-адреса, также должен предоставить вам сетевую маску и настройки шлюза для обоих IP-адресов.

Пример (это мой частный сервер и настоящие IP-адреса):

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
217.10.144.208  0.0.0.0         255.255.255.248 U     0      0        0 eth0
0.0.0.0         217.10.144.209  0.0.0.0         UG    0      0        0 eth0

Сам сервер находится на 217.10.144.210, который находится в той же подсети, что и шлюз (должен, иначе трафик не может быть маршрутизирован). Предположительно интернет-провайдер предоставляет ту же подсеть для некоторых других клиентов.

Если вы находитесь на этом сервере и выполняете эхо-запрос на свой шлюз, вы должны получить сообщение «Нет маршрута к хосту».

Поговорите с интернет-провайдером и получите правильные настройки, затем обновите конфигурацию интерфейса, перезапустите сеть и проверьте ее снова.