Весь вечер ковыряюсь и никак не могу увидеть, в чём затык.
Есть хост A. На нём настроен мост
# brctl show br3
bridge name bridge id STP enabled interfaces
br3 8000.00259005540c yes bond1.3
vnet0
в котором bond1.3 — интерфейс хоста, vnet0 — интерфейс виртуальной машины V.
V пингуется с любого внешнего хоста и пингует любой внешний хост. Если же пытаешься подключиться к V на любой из прослушиваемых портов:
# netstat -lnap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:636 0.0.0.0:* LISTEN 3697/slapd
tcp 0 0 0.0.0.0:56575 0.0.0.0:* LISTEN 3639/rpc.mountd
tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 3697/slapd
tcp 0 0 0.0.0.0:35654 0.0.0.0:* LISTEN 3583/rpc.statd
tcp 0 0 0.0.0.0:33863 0.0.0.0:* LISTEN 3639/rpc.mountd
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 3569/rpcbind
tcp 0 0 0.0.0.0:57936 0.0.0.0:* LISTEN 3639/rpc.mountd
tcp 0 0 0.0.0.0:37109 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 3715/sshd
то получаем облом, за исключением случая, когда соединяться пытаются с хоста A.
Вот так выглядит облом на V:
# tcpdump -i eth0 -n 'host 192.168.1.210'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
04:04:01.980335 IP 192.168.1.210.40741 > 192.168.1.122.636: S 1326115610:1326115610(0) win 18236 <mss 9118,sackOK,timestamp 64614 0,nop,wscale 8>
04:04:04.990534 IP 192.168.1.210.40741 > 192.168.1.122.636: S 1326115610:1326115610(0) win 18236 <mss 9118,sackOK,timestamp 64915 0,nop,wscale 8>
04:04:11.000494 IP 192.168.1.210.40741 > 192.168.1.122.636: S 1326115610:1326115610(0) win 18236 <mss 9118,sackOK,timestamp 65516 0,nop,wscale 8>
А вот так на том хосте, с которого пытаются соединиться, B:
# tcpdump -i br3 -n 'host 192.168.1.122 '
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on br3, link-type EN10MB (Ethernet), capture size 96 bytes
04:04:03.852997 IP 192.168.1.210.40741 > 192.168.1.122.636: S 1326115610:1326115610(0) win 18236 <mss 9118,sackOK,timestamp 64614 0,nop,wscale 8>
04:04:06.862985 IP 192.168.1.210.40741 > 192.168.1.122.636: S 1326115610:1326115610(0) win 18236 <mss 9118,sackOK,timestamp 64915 0,nop,wscale 8>
04:04:12.872983 IP 192.168.1.210.40741 > 192.168.1.122.636: S 1326115610:1326115610(0) win 18236 <mss 9118,sackOK,timestamp 65516 0,nop,wscale 8>
Вот так выглядит соединение с хоста A:
tcpdump -i br3 -n 'host 192.168.1.122 and tcp port 636'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on br3, link-type EN10MB (Ethernet), capture size 96 bytes
04:07:42.502219 IP 192.168.1.209.60449 > 192.168.1.122.636: S 3713155501:3713155501(0) win 18236 <mss 9118,sackOK,timestamp 122580 0,nop,wscale 8>
04:07:42.502454 IP 192.168.1.122.636 > 192.168.1.209.60449: S 3882010051:3882010051(0) ack 3713155502 win 14480 <mss 1460,sackOK,timestamp 1089495 122580,nop,wscale 4>
04:07:42.502500 IP 192.168.1.209.60449 > 192.168.1.122.636: . ack 1 win 72 <nop,nop,timestamp 122580 1089495>
04:07:44.911105 IP 192.168.1.209.60449 > 192.168.1.122.636: F 1:1(0) ack 1 win 72 <nop,nop,timestamp 122821 1089495>
04:07:44.911807 IP 192.168.1.122.636 > 192.168.1.209.60449: F 1:1(0) ack 2 win 905 <nop,nop,timestamp 1091904 122821>
04:07:44.911841 IP 192.168.1.209.60449 > 192.168.1.122.636: . ack 2 win 72 <nop,nop,timestamp 122821 1091904>
На мост br3 хоста A отлично соединяется любой внешний хост. Проблема появляется именно тогда, когда пытаешься соединиться с той частью, которая относится к V. Пересмотрел всё: ядро
CONFIG_BRIDGE=y
CONFIG_BRIDGE_IGMP_SNOOPING=y
iptables -L -nv
Chain INPUT (policy ACCEPT 54417 packets, 87M bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 10654 packets, 798K bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 42428 packets, 10M bytes)
pkts bytes target prot opt in out source destination
ebtables -L
Bridge table: filter
Bridge chain: INPUT, entries: 0, policy: ACCEPT
Bridge chain: FORWARD, entries: 0, policy: ACCEPT
Bridge chain: OUTPUT, entries: 0, policy: ACCEPT
Проблема, кажется, с tcp, т.к. udp (например, dns) работает с того же хоста, с которого не проходят tcp. Очень странно. Можно было бы грешить на управляемый свитч между хостами, но соединения с хостов за пределами этого свитча на хост A проходят, как писал уже.
В каком направлении ещё можно посмотреть?