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
,