Я использую 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
в терминал, но это не полезно для меня, мне нужен правильный шлюз, который будет установлен во время запуска, и я лучше найду источник проблемы
У вас должен быть только один шлюз по умолчанию на вашем компьютере. И это должно идти к маршрутизатору, который идет к границе или из вашей сети. Вы всегда можете использовать ip route list
, чтобы увидеть, какие маршрутизаторы у вас есть.
Таким образом, на самом деле есть две ошибки в каждой из ваших eth1
и eht2
строфы в /e/n/interfaces
.
gateway
, указывающей на себя. Если ваша машина не знает, куда отправить пакет с неизвестным IP
-адресом, почему вы должны сказать ему переслать этот пакет себе? Поэтому вы никогда не должны указывать gateway
на себя. 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
.
Я вряд ли являюсь экспертом в этом вопросе, но я подозреваю, что из-за широковещательной природы пакетов 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]