DHCP-сервер с несколькими интерфейсами в Ubuntu, уничтожает шлюз по умолчанию

Я использую Ubuntu, и у меня много интерфейсов. eth0, которое является моим интернет-соединением, и оно получает информацию от DHCP-сервера полностью вне моего контроля.

Тогда у меня есть eth1,eth2,eth3 а также eth4 для которого я создал DHCP-сервер.(ISC DHCP-сервер)

Кажется, это работает, и я даже получаю IP-адрес от иностранного DHCP-сервера через интернет-интерфейс.

Тем не менее, по некоторым причинам, кажется, мои ворота для eth0 облажался после того, как я установил свой локальный DHCP-сервер для eth1-eth4, (Я так думаю, потому что я получил IP для eth0, и я могу пропинговать другие вещи в локальной сети, но я не могу получить доступ к Интернету).

мой eth0информация в /etc/network/interfaces:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto eth1
iface eth1 inet static
  address 10.0.1.1
  netmask 255.255.255.0
  network 10.0.1.0
  broadcast 10.0.1.255
  gateway 10.0.1.1
  mtu 8192


auto eth2
iface eth2 inet static
  address 10.0.2.1
  netmask 255.255.255.0
  network 10.0.2.0
  broadcast 10.0.2.255
  gateway 10.0.2.1
  mtu 8192

мой /etc/default/isc-dhcp-server:

INTERFACES="eth1 eth2 eth3 eth4"

Так почему мой локальный DHCP-сервер портит шлюз для eth0когда я говорю это не слушать eth0? Кто-нибудь видит проблему или что я могу сделать, чтобы это исправить?

Проблема, похоже, действительно заключается в шлюзах. netstat -nr дает:

0.0.0.0 --- 10.X.X.X ---- 0.0.0.0 --- UG 0 0 0 eth3

Это должно было быть

0.0.0.0 129.2XX.X.X 0.0.0.0 UG 0 0 0 eth0

Поэтому по какой-то причине мой локальный DHCP-сервер переопределяет шлюз, который я получаю из сети DHCP.

Редактировать: dhcp.conf выглядит так (я включил информацию только для eth1 подсети):

ddns-update-style none;

not authoritative;

subnet 10.0.1.0 netmask 255.255.255.0 { interface eth1; 
option domain-name "example.org"; 
option domain-name-servers ns1.example.org, 
ns2.example.org; 
default-lease-time 600; 
max-lease-time 7200;
range 10.0.1.10 10.0.1.100;
host camera1_1 { hardware ethernet 00:30:53:11:24:6E; fixed-address 10.0.1.10; }
host camera2_1 { hardware ethernet 00:30:53:10:16:70; fixed-address 10.0.1.11; } 
}

Кроме того, кажется, что шлюз правильно настроен, если я запускаю /etc/init.d/networking restart в терминале, но это мне не поможет, мне нужно правильно настроить шлюз во время запуска, и я лучше найду источник проблемы

2 ответа

Я не очень разбираюсь в этом вопросе, но подозреваю, что из-за широковещательной природы пакетов DHCP ваш локальный сервер DHCP всегда будет отвечать на локально исходящие запросы независимо от настроенных вами интерфейсов прослушивания.

Поэтому я бы посоветовал вам попытаться просто установить операторы "reject" в вашем dhclient.conf, чтобы отклонять предложения с локального сервера:

reject 10.0.1.1;
reject 10.0.2.1;

(Я только предполагаю, что вы можете использовать несколько утверждений об отклонении, страница руководства неясна.)

Я тоже могу подумать о некоторых других вещах, но в любом случае я могу ошибаться в своем первоначальном предположении. Я всегда нахожу это полезным инструментом для диагностики происходящего:

apt-get install dhcpdump
dhcpdump -i eth1

PS: Если вы хотите правильно разделить eth0, eth1, eth2 и т. Д., Рассмотрите возможность использования VLAN для изоляции трафика на уровне 2.

У вас должен быть только один шлюз по умолчанию на вашем компьютере. И это должно идти к маршрутизатору, который идет к границе или из вашей сети. Вы всегда можете использовать ip route list чтобы увидеть, какие маршрутизаторы у вас есть.

Так что на самом деле есть две ошибки в каждом из ваших eth1 а также eht2 строфа в /e/n/interfaces,

  1. Вы не должны иметь gateway директива, указывающая на себя. Если ваша машина не знает, куда отправить пакет с неизвестным IP-адрес, почему вы должны сказать ему переслать этот пакет себе? Таким образом, вы никогда не должны указывать gateway к себе.
  2. У вас должен быть только один (или ни один) шлюз по умолчанию на вашем компьютере. И это должно указывать на улицу. Интерфейс снаружи включен eth0и это делает проход от dhcp, Так что нет необходимости устанавливать gateway Вот.

Итак, удалите все gateway директивы от /e/n/interfaces и это будет работать (лучше).

И, кстати, оба network а также broadcast рассчитаны из address а также netmaskтак что вам не нужно указывать их. На самом деле это может привести к некоторым странным ошибкам, если вы их неправильно поняли, поэтому лучше не указывать их. См. /questions/267206/kogda-trebuetsya-set-shirokoveschanie-i-shlyuz-dlya-ruchnoj-nastrojki-setevogo-i/267213#267213

Для ваших клиентов в вашей локальной сети, на которых у вас есть собственный сервер dhcp, вы должны указать им использовать ваш компьютер в конфигурации для сервера dhcp. Скоро eth1 Вы должны сказать клиентам использовать 10.0.1.1 как роутер. Вы не можете сделать это в /e/n/interfaces,

Другие вопросы по тегам