SCTP recv problems
Здравствуйте!
Есть некое ПО, использующее SCTP и работающее на одной машине, но не работающее на другой. Все ПО и сетевые настройки на машинах абсолютно идентичны — для исключения эффекта разной кривизны рук/глаз обе машины загружались с linux liveusb и далее запускался скрипт в духе:
rpm -Uvh software.rpm
echo ... > /etc/software.conf
ip a add ...
ip r add ...
service software start
В поисках источника проблемы докатились до того, что написали маленький SCTP-сервер, который точно так же работает только на одной из машин:
#!/usr/bin/perl
use strict;
use Socket;
my $proto = getprotobyname('sctp');
socket(server, PF_INET, SOCK_RAW, $proto) || die "socket error: $!";
bind(server, sockaddr_in(0, INADDR_ANY)) || die "bind error: $!";
my $buffer;
while (1) {
print "recv wait ...\n";
my $paddr = recv(server, $buffer, 65535, 0);
my ($port, $iaddr) = sockaddr_in($paddr);
print "recv from [".inet_ntoa($iaddr)."]\n";
}
На одной машине поведение такое:
# ./sctp.pl
recv wait ...
recv from [10.10.10.1]
recv wait ...
recv from [10.10.10.1]
и:
$ tshark -i eth0 -R 'sctp'
Capturing on eth0
9.304980 10.10.10.1 -> 10.10.10.2 SCTP 86 INIT
9.305173 10.10.10.2 -> 10.10.10.1 SCTP 50 ABORT
39.426030 10.10.10.1 -> 10.10.10.2 SCTP 86 INIT
39.426237 10.10.10.2 -> 10.10.10.1 SCTP 50 ABORT
На другой:
# ./sctp.pl
recv wait ...
и:
$ tshark -i eth0 -R 'sctp'
Capturing on eth0
5.112609 10.10.10.1 -> 10.10.10.2 SCTP 86 INIT
6.212575 10.10.10.1 -> 10.10.10.2 SCTP 86 INIT
Отчего INIT-пакеты не добираются до сервера? Да, iptables на обоих машинах отсутствует, модуль sctp не загружен, ipv6 выключен.