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 в терминал, но это не полезно для меня, мне нужен правильный шлюз, который будет установлен во время запуска, и я лучше найду источник проблемы

3
задан 21 June 2014 в 20:37

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, поэтому вам не нужно их указывать. На самом деле это может привести к некоторым странным ошибкам, если вы их неправильно поняли, поэтому лучше не указывать их. См. https://askubuntu.com/a/432876/9993

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

0
ответ дан 21 June 2014 в 20:37

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

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

reject 10.0.1.1;
reject 10.0.2.1;

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

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

apt-get install dhcpdump
dhcpdump -i eth1

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

0
ответ дан 21 June 2014 в 20:37

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

Похожие вопросы: