У меня установлена CentOS 6 с 1 сетевой картой, eth0, работает нормально
Я добавил еще одну сетевую карту, eth1
. Обе сетевые карты находятся на одном коммутаторе и в одной локальной сети.
Я скопировал ifcfg-eth0
к ifcfg-eth1
, а затем просто изменил DEVICE=
, IPADDR=
, и HWADDR=
iines.
После настройки /etc/sysconfig/network-scripts/ifcfg-eth1
, Я могу пинговать eth1
с внешней машины целый день и нормально.
Но если я попытаюсь выполнить пинг изнутри сервера (ping -Ieth1 google.com
), Я не получаю ответа, тогда как ping -Ieth0 google.com
работает отлично.
Я удалил GATEWAY=
линии из обоих ifcfg-eth0
и ifcfg-eth1
, и положи GATEWAY=
в /etc/sysconfig/network
.
Вот мои обфусцированные файлы конфигурации:
eth0
УСТРОЙСТВО = eth0
BOOTPROTO = статический
IPADDR = 192.168.1.40
NETMASK = 255.255.255.0
HWADDR = 00: 00: 23: 45: 67: 8F
NM_CONTROLLED = нет
ONBOOT = да
ТИП = Ethernet
IPV6INIT = нет
DNS1 = 192.168.1.240
DNS2 = 192.168.1.244
eth1
УСТРОЙСТВО = eth1
BOOTPROTO = статический
IPADDR = 192.168.1.41
NETMASK = 255.255.255.0
HWADDR = 00: 00: 23: 45: 67: 99
NM_CONTROLLED = нет
ONBOOT = да
ТИП = Ethernet
IPV6INIT = нет
DNS1 = 192.168.1.240
DNS2 = 192.168.1.244
сеть
NETWORKING_IPV6 = нет
HOSTNAME = myserver
СЕТЬ = да
ШЛЮЗ = 192.168.1.2
Мой iptables -L -v
в настоящее время полностью пусты. И я не использую SELinux.
Никогда не устанавливайте два интерфейса в одну подсеть, это, вероятно, не будет работать должным образом. Если вы изучите вывод ip ro
, вы поймете, что Linux преимущественно основан на маршрутизации по месту назначения. Хотя возможна маршрутизация на основе источника, на практике это очень редко. Я могу вспомнить только один раз, когда мне нужно было это сделать в моей жизни, какой бы ни была причина.
Вы неправильно поняли, что ping -I
делает, отсюда и путаница. От мужчины:
-I адрес интерфейса
Set source address to specified interface address.
Ping не отправляет пакет через интерфейс -I. Когда пакет готов к отправке, ядро смотрит на IP-адрес назначения и ip ro
, и на основе этих двух вещей он решает, какой интерфейс использовать. Он не смотрит на пакеты исходный IP.
-I, если для установки IP-адреса источника пакета. Когда пакет исходит, коммутатор знает, что оба ваших IP-адреса пришли с MAC-адреса eth0, поэтому он отправляет туда ответы. Но eth0 отбрасывает все, что не адресовано его собственному IP (или трансляции). Между eth0 и eht1 нет «волшебного внутреннего моста», кроме того, что вы видите в ip ro
. Так что ответ никогда не дойдет до eth1.
В ip ro
это современная замена устаревшим route
.
Поскольку вы используете тот же коммутатор / шлюз, вы, вероятно, захотите связь из eth0 и eth1. Затем установите два ваших IP-адреса на интерфейсе bond0 (ifcfg-bond0). Это стандартная практика, и она сработает как амулет.
Чтобы полностью разделить трафик между eth0 и eth1, лучше всего установить eth1 в другую IP-подсеть, например 192.168.2.40, и использовать другой маршрутизатор / шлюз :)
net.ipv4.conf.default.rp_filter = 2
net.ipv4.conf.all.rp_filter = 2
Пакеты отклоняются, когда маршрут исходящего трафика отличается от маршрута входящего трафика
Даниэль -
Похоже, что ваша проблема существует из-за ограничения заданной конфигурации. У вас есть два интерфейса в одной локальной сети / подсети, но один из них должен быть маршрутом по умолчанию. Запустите эту команду, чтобы убедиться, что ваш маршрут по умолчанию - eth0, это будет указывать на то, что вы не сможете подключиться к каким-либо устройствам за пределами вашей сети, когда попытаетесь принудительно направить трафик через eth1.
route
Это должно выглядеть примерно так:
Таблица IP-маршрутизации ядра Шлюз назначения Флаги Genmask Метрика Ссылка Использование Iface
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
локальная ссылка * 255.255.0.0 U 1002 0 0 eth0
по умолчанию 192.168.1.0 0.0.0.0 UG 0 0 0 eth0
Для проверки работоспособности попробуйте пропинговать что-то локальное в вашей локальной сети через этот порт:
ping -Ieth1 192.168.1.2