LINUX.ORG.RU
ФорумAdmin

[bridge][VM] Не работают tcp-соединения

 ,


0

2

Весь вечер ковыряюсь и никак не могу увидеть, в чём затык.

Есть хост 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
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
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
и ничего не увидел. Пробовал STP отключать, но не помогло.

Проблема, кажется, с tcp, т.к. udp (например, dns) работает с того же хоста, с которого не проходят tcp. Очень странно. Можно было бы грешить на управляемый свитч между хостами, но соединения с хостов за пределами этого свитча на хост A проходят, как писал уже.

В каком направлении ещё можно посмотреть?


На предыдущем ядре 2.6.39 всё работает как надо. Придётся разбираться, что же поломали в 3.х (как 0, так и 1).

HolyBoy
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.