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,
- Вы не должны иметь
gatewayдиректива, указывающая на себя. Если ваша машина не знает, куда отправить пакет с неизвестнымIP-адрес, почему вы должны сказать ему переслать этот пакет себе? Таким образом, вы никогда не должны указыватьgatewayк себе. - У вас должен быть только один (или ни один) шлюз по умолчанию на вашем компьютере. И это должно указывать на улицу. Интерфейс снаружи включен
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,