Linux-клиенты не получают адрес от dhcp-сервера

Автор sazhyk, 20 мая 2015, 12:19:41

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

sazhyk

День добрый!
Возникла проблема странная, никак не могу разобраться в чем. Суть такова:

  • Имеется сервер с Debian 8 на борту
  • Установлен dnsmasq в качестве DHCP и DNS сервера
  • У сервера (наверное правильнее шлюза), два интерфейса: eth0 - WAN, eth1 - LAN
  • Всё это развернуто на KVM, сеть внутренняя изолированная.
  • Во внутренней сети следующие машины: Win server 2008r2 (терминальный), Debian 8 - SQL-server

/etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet dhcp

# The secondary network interface
allow-hotplug eth1
auto eth1
iface eth1 inet static
address 192.168.54.1
netmask 255.255.255.0
network 192.168.54.0
broadcast 192.168.54.255
post-up /usr/bin/nat.sh


/usr/bin/nat.sh

#! /bin/bash

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -s 192.168.54.0/24 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -d 192.168.54.0/24 -j ACCEPT
iptables -P FORWARD DROP
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -I PREROUTING --dst 192.168.166.181 -p tcp --dport 1975 -j DNAT --to-destination 192.168.54.100:3389
iptables -t nat -I POSTROUTING -p tcp --dst 192.168.54.100 --dport 3389 -j SNAT --to-source 192.168.54.1
iptables -t nat -I OUTPUT --dst 192.168.166.181 -p tcp --dport 1975 -j DNAT --to-destination 192.168.54.100:3389
iptables -I FORWARD -i 192.168.54.1 --dst 192.168.54.100 -j ACCEPT
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 443 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 8080 -j REDIRECT --to-port 3128



Конфиг dnsmasq'а:
user@serv:~# cat /etc/dnsmasq.conf | grep -v '^#' | sed '/^$/d' | more
resolv-file=/etc/resolv-my.conf
listen-address=127.0.1.1, 192.168.54.1
dhcp-range=192.168.54.30,192.168.54.150,255.255.255.0,12h
dhcp-option=3,192.168.54.1
dhcp-leasefile=/var/lib/misc/dnsmasq.leases
log-queries
log-facility=/var/log/dnsmasq.log


resolv-my.conf
nameserver 127.0.0.1
nameserver 8.8.8.8
nameserver 8.8.4.4


Лог dnsmasq'a:
May 20 13:50:53 dnsmasq-dhcp[1464]: DHCPDISCOVER(eth1) 52:54:00:06:7a:78
May 20 13:50:53 dnsmasq-dhcp[1464]: DHCPOFFER(eth1) 192.168.54.145 52:54:00:06:7a:78
May 20 13:50:56 dnsmasq-dhcp[1464]: DHCPDISCOVER(eth1) 52:54:00:06:7a:78
May 20 13:50:56 dnsmasq-dhcp[1464]: DHCPOFFER(eth1) 192.168.54.145 52:54:00:06:7a:78
May 20 13:51:10 dnsmasq-dhcp[1464]: DHCPDISCOVER(eth1) 52:54:00:06:7a:78
May 20 13:51:10 dnsmasq-dhcp[1464]: DHCPOFFER(eth1) 192.168.54.145 52:54:00:06:7a:78
May 20 13:51:19 dnsmasq-dhcp[1464]: DHCPDISCOVER(eth1) 52:54:00:06:7a:78
May 20 13:51:19 dnsmasq-dhcp[1464]: DHCPOFFER(eth1) 192.168.54.145 52:54:00:06:7a:78

Это от sql-сервера

May 20 13:59:37 dnsmasq-dhcp[1596]: DHCPDISCOVER(eth1) 52:54:00:5a:8d:a1
May 20 13:59:37 dnsmasq-dhcp[1596]: DHCPOFFER(eth1) 192.168.54.102 52:54:00:5a:8d:a1
May 20 13:59:37 dnsmasq-dhcp[1596]: DHCPREQUEST(eth1) 192.168.54.102 52:54:00:5a:8d:a1
May 20 13:59:37 dnsmasq-dhcp[1596]: DHCPACK(eth1) 192.168.54.102 52:54:00:5a:8d:a1 winserv

Это от win сервера.

Содержимое dnsmasq.leases
user@serv:~# cat /var/lib/misc/dnsmasq.leases
1432155577 52:54:00:5a:8d:a1 192.168.54.102 winserv 01:52:54:00:5a:8d:a1


Вывод iptables:
user@serv:~# iptables -L -v
Chain INPUT (policy ACCEPT 14279 packets, 2129K bytes)
pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     all  --  192.168.54.1 any     anywhere             192.168.54.100     
3564  767K ACCEPT     all  --  eth1   eth0    192.168.54.0/24      anywhere           
3784  283K ACCEPT     all  --  eth0   eth1    anywhere             192.168.54.0/24     

Chain OUTPUT (policy ACCEPT 10425 packets, 4793K bytes)
pkts bytes target     prot opt in     out     source               destination


Проблема заключается в следующем: сервер windows адрес получает, а сервер linux - нет. Не могу понять почему.

Сообщение объединено: 20 Май 2015, 12:32:52

Пожалуй стоит добавить. Пробовал запускать другие linux дистрибутивы - та же ерунда, windows-системы спокойно получают адреса. Если вручную прописать настройки на linux, то всё спокойно работает.

sazhyk

UPD. Кому интересно: проблема была в сетевом адаптере виртуальной машины. А именно, стоял тип адаптера virtio. Всё ешилось переключением на Hypervisor Default. Пока не знаю почему, но факт. Выясню отпишу.

sazhyk

#2
Хоть и никто не пишет ничего, пожалуй я продолжу мысли. Экспериментально установил, что сеть автоматом не поднимается только при следующих условиях:

  • гостевой машине  назначен сетевой интерфейс virtio
  • сеть внутненняя, т. е. изолирована от внешнего мира
  • система установлена
В процессе установки сеть поднимается, но после перезагрузки больше не поднимается. Tcpdump показал, что DHCPDISCOVER проходит, уходит ответ DHCPOFFER, но не доходит до проблемной машины. Я не столь силен в сетях, и не смог точно определить где теряется ответ.
Может кто сталкивался с подобной ситуациет?

ihammers

Цитата: sazhyk от 20 мая 2015, 12:19:41dhcp-range=192.168.54.30,192.168.54.150,255.255.255.0,12h
Правильным ли является данная строчка?

Вам требуется чтобы внутренние машины получали ip от dhcp-сервера? Если да, то нужен проброс адресов.

Дополнительная информация по dnsmasq.
Debian GNU/Linux Bookworm, LXQt/OpenBox: AMD Ryzen 5 5600G / 64Gb RAM
_______________________________
Debian GNU/Linux Bookworm, без графики: AMD Phenon X4 / 16Gb RAM
_______________________________
Debian GNU/Linux Bookworm, LXQt/OpenBox: Acer Aspire One 722 AMD C60 / 8Gb RAM / ATI HD6290

sazhyk

Цитата: ihammers от 27 мая 2015, 05:12:18
Цитата: sazhyk от 20 мая 2015, 12:19:41dhcp-range=192.168.54.30,192.168.54.150,255.255.255.0,12h
Правильным ли является данная строчка?

Вам требуется чтобы внутренние машины получали ip от dhcp-сервера? Если да, то нужен проброс адресов.

Дополнительная информация по dnsmasq.
net.ipv4.ip_forward=1
Всё включено.

Сегодня попробовал поставить гостевую CentOS. Адрес спокойно получила. Не получает именно Debian.