LINUX.ORG.RU
ФорумAdmin

Пакеты не доходят до dnsmasq

 ,


0

2

centos6.

В libvirt сделал виртуальную сетку, libvirt запустил dnsmsq, он слушает на 53-ем порту, но dns запросы не проходят. selinux permissive, iptables выключен. Пакеты теряются не доходя до dnsmasq (он не выходит из select'а). dhcp на виртуалки раздается нормально. Где может быть затык?

[root@lvirt2 ~]# netstat -tnpl | grep dnsmasq
tcp        0      0 192.168.192.1:53            0.0.0.0:*                   LISTEN      1551/dnsmasq 
[root@lvirt2 ~]# dig @192.168.192.1 +tcp hw1.manip
;; Connection to 192.168.192.1#53(192.168.192.1) for hw1.manip failed: connection refused.
<network>
  <name>manip</name>
  <uuid>47cd227e-a340-4c25-832e-a07ed178d33b</uuid>
  <bridge name='virbr0' stp='on' delay='0' />
  <mac address='52:54:00:B9:19:00'/>
  <domain name='manip'/>
  <ip address='192.168.192.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.192.128' end='192.168.192.254' />
    </dhcp>
  </ip>
</network>
ps axf | grep dnsmasq
 2432 pts/1    S+     0:00                      \_ grep dnsmasq
 1551 ?        S      0:00 /usr/sbin/dnsmasq --strict-order --domain=manip --pid-file=/var/run/libvirt/network/manip.pid --conf-file= --except-interface lo --bind-interfaces --listen-address 192.168.192.1 --dhcp-option=3 --no-resolv --dhcp-range 192.168.192.128,192.168.192.254 --dhcp-leasefile=/var/lib/libvirt/dnsmasq/manip.leases --dhcp-lease-max=127 --dhcp-no-override --expand-hosts --dhcp-hostsfile=/var/lib/libvirt/dnsmasq/manip.hostsfile --addn-hosts=/var/lib/libvirt/dnsmasq/manip.addnhosts
[root@lvirt2 ~]# strace -p 1551
Process 1551 attached
select(9, [3 5 6 7 8], [], [], NULL
[root@lvirt2 ~]# ip link show 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:bf:a2:f7 brd ff:ff:ff:ff:ff:ff
3: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN 
    link/ether 52:54:00:b9:19:00 brd ff:ff:ff:ff:ff:ff
4: virbr0-nic: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 500
    link/ether 52:54:00:b9:19:00 brd ff:ff:ff:ff:ff:ff
8: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 500
    link/ether fe:54:00:a1:19:bf brd ff:ff:ff:ff:ff:ff
[root@lvirt2 ~]# ip route show 
192.168.192.0/24 dev virbr0  proto kernel  scope link  src 192.168.192.1 
192.168.128.0/24 dev eth0  proto kernel  scope link  src 192.168.128.11 
169.254.0.0/16 dev eth0  scope link  metric 1002 
default via 192.168.128.1 dev eth0 
[root@lvirt2 ~]# ip addr show 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:bf:a2:f7 brd ff:ff:ff:ff:ff:ff
    inet 192.168.128.11/24 brd 192.168.128.255 scope global eth0
    inet6 fe80::5054:ff:febf:a2f7/64 scope link 
       valid_lft forever preferred_lft forever
3: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN 
    link/ether 52:54:00:b9:19:00 brd ff:ff:ff:ff:ff:ff
    inet 192.168.192.1/24 brd 192.168.192.255 scope global virbr0
4: virbr0-nic: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 500
    link/ether 52:54:00:b9:19:00 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::5054:ff:feb9:1900/64 scope link 
       valid_lft forever preferred_lft forever
8: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 500
    link/ether fe:54:00:a1:19:bf brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc54:ff:fea1:19bf/64 scope link 
       valid_lft forever preferred_lft forever
[root@lvirt2 ~]# brctl show 
bridge name	bridge id		STP enabled	interfaces
virbr0		8000.525400b91900	yes		virbr0-nic
							vnet0

[root@lvirt2 ~]# iptables -S 
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
[root@lvirt2 ~]# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   permissive
Mode from config file:          permissive
Policy version:                 24
Policy from config file:        targeted
★★

Ответ на: комментарий от ArcFi

--no-resolv

virsh net-list virsh net-edit ...

--no-resolv это не читать /etc/resolv.conf. Пробовал руками запустить dnsmasq без этой опции — не помогает.

ival ★★ ()

Проверил логи iptables. Пакет проходит до таблицы filter цепочки INPUT. По идее дальше он должен идти сразу в процесс, но kernel не передает его dnsmasq'у, а refuse'ит соединение.

ival ★★ ()
Ответ на: комментарий от ArcFi

У меня версия маловата. forwarder появился только в 1.1.3, а у меня 0.10.2.

Там до dnsmasq дело не доходит. Если бы в этом было дело, то в strace'е при запросе была бы некоторая активность.

ival ★★ ()
Ответ на: комментарий от ival

Если бы в этом было дело

Именно в этом, только что проверил у себя на серваке: с forwarder резолвит, без него — нет.

У меня версия маловата. forwarder появился только в 1.1.3, а у меня 0.10.2.

Запустите дополнительный dnsmasq, который будет стартовать перед libvirt и слушать все интерфейсы, либо то же самое через хуки.

ArcFi ()
Ответ на: комментарий от ArcFi

Проблема в --bind-interfaces with SO_BINDTODEVICE. Я запрашиваю с хостовой машины, там интерфейс lo и пакеты в socket не попадают.

ival ★★ ()
Ответ на: комментарий от ival

Короче, вариантов дофига, выбирайте любой:

  • Обновиться, и forwarder заработает.
  • Настроить сеть через мост, вместо NAT.
  • Прописать DNS руками у гостя.
  • Поднимать dnsmasq перед libvirt на всех интерфейсах.
  • Через hook-скрипт убивать кривой инстанс dnsmasq и запускать с нужным конфигом.
  • Через iptables заворачивать DNS-запросы на другой адрес.
ArcFi ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.