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