How to connect to sctp server running in docker container from the sctp client on host machine?

My host machine application is trying to establish a SCTP connection at port 38412 to a docker container which is running SCTP server at port 38412. I am mapping and publishing the ports but getting an error. My host application is timing out at the following check:

if (connect(fd, (struct sockaddr*)&myaddr,sizeof(myaddr))== -1){
	higLog("SCTP CLIENT connect failed, port %d, Error %s",
		port, strerror(errno));
	return -1;
}

Error Connection timed out

My DockerFile looks something like this.

FROM ubuntu:focal

ARG DEBIAN_FRONTEND=noninteractive

RUN apt-get update && \
	apt-get install -y \
    dialog \
    apt-utils \
    iputils-ping \
    inetutils-traceroute \
    iproute2 \
    curl \
    dnsutils \
    nano \
    build-essential \
    libcpprest-dev \
    libboost-all-dev \
    libssl-dev \
    cmake \
    libyaml-cpp-dev \
    libsctp1 \
    libsctp-dev \
    tre-agrep \
    libtre5 \
    libtre-dev \
    libhiredis-dev \
    gcovr \
    lcov \
    curl \
    make \
    binutils \
    libcurlpp-dev \
    libcurlpp0 \
    libjsoncpp-dev

COPY . $HOME/src/D1/Func
RUN cd src
RUN mkdir utility_library
RUN cd ..
RUN mv src/D1/Func/utility_library src/utility_library
WORKDIR "$HOME/src/D1/Func"
EXPOSE 80
CMD ["/bin/bash", "-c", "cmake .;make -j16;./build/bin/Func eth0"]

And running this container using the following docker-run command:

docker run --name con1 --net Network1 --ip 10.0.0.21 -p 127.0.0.1:38412:38412/sctp sourav/image1:1.0.0

Can I get some ideas on how to solve it ?

did you get any success? im in the same situation (opposite direction, server is in the network and i need to connect to the server from a container)

Same port no. mapping doesn’t work with sctp. Try different port no. for the container and host for the mapping. This change helped in solving my issue.

1 Like

faced with a similar situation and trying to ask for help - I realized that I really have no idea how docker interacts with iptables to do its’ magic. Unable to explain the problem - I spoke to my coach who recommended I build an isolated test case to demonstrate the issue.

+ cat /etc/docker/daemon.json
{ "userland-proxy": true }
++ docker ps -q
+ for i in $(docker ps -q)
+ docker rm -f 8ba2df66cf92
8ba2df66cf92
+ docker network prune -f
Deleted Networks:
mybr0

+ docker network create --driver=bridge --subnet=172.28.0.0/16 --ip-range=172.28.5.0/24 --gateway=172.28.5.254 mybr0
787b9bde508dba2261d74e5b9372bd35eb9ff7cfae89f436141feb309fb5ee78
+ tshark -i any -q sctp
+ sleep 1
+ docker run --rm --network mybr0 --ip 172.28.5.1 --publish 1234:1234/sctp -v /usr/lib64:/usr/lib64 -v /usr/bin/sctp_test:/usr/bin/sctp_test registry.access.redhat.com/ubi9/ubi sctp_test -H 172.28.5.1 -P 1234 -l -d 2
Running as user "root" and group "root". This could be dangerous.
Capturing on 'any'
local:addr=172.28.5.1, port=search-agent, family=2
seed = 1733813572

Starting tests...
	socket(SOCK_SEQPACKET, IPPROTO_SCTP)  ->  sk=3
	bind(sk=3, [a:172.28.5.1,p:search-agent])  --  attempt 1/10
	listen(sk=3,backlog=100)
Server: Receiving packets.
	recvmsg(sk=3) + netstat -laSnp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
sctp                :::1234                                         LISTEN      57759/docker-proxy  
sctp                0.0.0.0:1234                                    LISTEN      57752/docker-proxy  
+ sctp_test -H 192.168.122.43 -P 4321 -h 192.168.122.43 -p 1234 -s -x 1 -d 2
remote:addr=192.168.122.43, port=search-agent, family=2
local:addr=192.168.122.43, port=rwhois, family=2
seed = 1733813573

Starting tests...
	socket(SOCK_SEQPACKET, IPPROTO_SCTP)  ->  sk=3
	bind(sk=3, [a:192.168.122.43,p:rwhois])  --  attempt 1/10
Client: Sending packets.(1/1)
	sendmsg(sk=3, assoc=0)    1 bytes.
	  SNDRCV(stream=0 flags=0x1 ppid=371520400
	sendmsg(sk=3, assoc=0)    1 bytes.
	  SNDRCV(stream=0 flags=0x1 ppid=1901294125
	sendmsg(sk=3, assoc=0)    1 bytes.
	  SNDRCV(stream=0 flags=0x1 ppid=1788810168
	sendmsg(sk=3, assoc=0)    1 bytes.
	  SNDRCV(stream=0 flags=0x1 ppid=933540669
	sendmsg(sk=3, assoc=0)    1 bytes.
	  SNDRCV(stream=0 flags=0x1 ppid=386168570
	sendmsg(sk=3, assoc=0)    1 bytes.
	  SNDRCVNotification: SCTP_ASSOC_CHANGE(COMMUNICATION_UP)
		(assoc_change: state=0, error=0, instr=10 outstr=10)
	recvmsg(sk=3) Data 1 bytes. First 1 bytes: <empty> text[0]=0
	recvmsg(sk=3) Data 1 bytes. First 1 bytes: <empty> text[0]=0
	  SNDRCV(stream=0 ssn=0 tsn=1341563197 flags=0x1 ppid=1901294125
cumtsn=1341563197
	recvmsg(sk=3) (stream=0 flags=0x1 ppid=1460147230
	sendmsg(sk=3, assoc=0)    1 bytes.
	  SNDRCV(stream=0 flags=0x1 ppid=209436834
	sendmsg(sk=3, assoc=0)    1 bytes.
	  SNDRCV(stream=0 flags=0x1 ppid=405171373
	sendmsg(sk=3, assoc=0)    1 bytes.
	  SNDRCV(stream=0 flags=0x1 ppid=1479754597
	sendmsg(sk=3, assoc=0)    1 bytes.
	  SNDRCV(stream=0 flags=0x1 ppid=936625727
	close(sk=3)
Data 1 bytes. First 1 bytes: <empty> text[0]=0
	  SNDRCV(stream=0 ssn=0 tsn=1341563198 flags=0x1 ppid=1788810168
cumtsn=1341563198
	recvmsg(sk=3) Data 1 bytes. First 1 bytes: <empty> text[0]=0
	  SNDRCV(stream=0 ssn=0 tsn=1341563199 flags=0x1 ppid=933540669
cumtsn=1341563199
	recvmsg(sk=3) Data 1 bytes. First 1 bytes: <empty> text[0]=0
	  SNDRCV(stream=0 ssn=0 tsn=1341563200 flags=0x1 ppid=386168570
cumtsn=1341563200
	recvmsg(sk=3) Data 1 bytes. First 1 bytes: <empty> text[0]=0
	  SNDRCV(stream=0 ssn=0 tsn=1341563201 flags=0x1 ppid=1460147230
cumtsn=1341563201
	recvmsg(sk=3) Data 1 bytes. First 1 bytes: <empty> text[0]=0
	  SNDRCV(stream=0 ssn=0 tsn=1341563202 flags=0x1 ppid=209436834
cumtsn=1341563202
	recvmsg(sk=3) Data 1 bytes. First 1 bytes: <empty> text[0]=0
	  SNDRCV(stream=0 ssn=0 tsn=1341563203 flags=0x1 ppid=405171373
cumtsn=1341563203
	recvmsg(sk=3) Data 1 bytes. First 1 bytes: <empty> text[0]=0
	  SNDRCV(stream=0 ssn=0 tsn=1341563204 flags=0x1 ppid=1479754597
cumtsn=1341563204
	recvmsg(sk=3) Data 1 bytes. First 1 bytes: <empty> text[0]=0
	  SNDRCV(stream=0 ssn=0 tsn=1341563205 flags=0x1 ppid=936625727
cumtsn=1341563205
	recvmsg(sk=3) Notification: SCTP_ASSOC_CHANGE(SHUTDOWN_COMPLETE)
		(assoc_change: state=3, error=0, instr=0 outstr=0)
	recvmsg(sk=3) 8.5.1   SCTP 208 DATA DATA DATA DATA DATA DATA DATA DATA 
   52 184.296948061 192.168.122.43 β†’ 172.28.5.1   SCTP 208 DATA (retransmission) DATA (retransmission) DATA (retransmission) DATA (retransmission) DATA (retransmission) DATA (retransmission) DATA (retransmission) DATA (retransmission) 
   53 184.296960905   172.28.5.1 β†’ 192.168.122.43 SCTP 64 SACK 
   54 184.296960905   172.28.5.1 β†’ 192.168.122.43 SCTP 64 SACK 
   55 184.296992493 192.168.122.43 β†’ 172.28.5.1   SCTP 56 SHUTDOWN 
   56 184.296994564 192.168.122.43 β†’ 172.28.5.1   SCTP 56 SHUTDOWN 
   57 184.297000952   172.28.5.1 β†’ 192.168.122.43 SCTP 52 SHUTDOWN_ACK 
   58 184.297000952   172.28.5.1 β†’ 192.168.122.43 SCTP 52 SHUTDOWN_ACK 
   59 184.297010138 192.168.122.43 β†’ 172.28.5.1   SCTP 52 SHUTDOWN_COMPLETE 
   60 184.297022829 192.168.122.43 β†’ 172.28.5.1   SCTP 52 SHUTDOWN_COMPLETE 
   61 229.266328325 192.168.122.43 β†’ 172.28.5.1   SCTP 84 INIT 
   62 229.266335197 192.168.122.43 β†’ 172.28.5.1   SCTP 84 INIT 
   63 229.266379559   172.28.5.1 β†’ 192.168.122.43 SCTP 308 INIT_ACK 
   64 229.266379559   172.28.5.1 β†’ 192.168.122.43 SCTP 308 INIT_ACK 
   65 229.266399935 192.168.122.43 β†’ 172.28.5.1   SCTP 300 COOKIE_ECHO DATA 
   66 229.266402789 192.168.122.43 β†’ 172.28.5.1   SCTP 300 COOKIE_ECHO DATA (retransmission) 
   67 229.266446197   172.28.5.1 β†’ 192.168.122.43 SCTP 68 COOKIE_ACK SACK 
   68 229.266446197   172.28.5.1 β†’ 192.168.122.43 SCTP 68 COOKIE_ACK SACK 
   69 229.266474789 192.168.122.43 β†’ 172.28.5.1   SCTP 68 DATA 
   70 229.266477903 192.168.122.43 β†’ 172.28.5.1   SCTP 68 DATA (retransmission) 
   71 229.266532280 192.168.122.43 β†’ 172.28.5.1   SCTP 208 DATA DATA DATA DATA DATA DATA DATA DATA 
   72 229.266535147 192.168.122.43 β†’ 172.28.5.1   SCTP 208 DATA (retransmission) DATA (retransmission) DATA (retransmission) DATA (retransmission) DATA (retransmission) DATA (retransmission) DATA (retransmission) DATA (retransmission) 
   73 229.266544529   172.28.5.1 β†’ 192.168.122.43 SCTP 64 SACK 
   74 229.266544529   172.28.5.1 β†’ 192.168.122.43 SCTP 64 SACK 
   75 229.266557710 192.168.122.43 β†’ 172.28.5.1   SCTP 56 SHUTDOWN 
   76 229.266560039 192.168.122.43 β†’ 172.28.5.1   SCTP 56 SHUTDOWN 
   77 229.266566416   172.28.5.1 β†’ 192.168.122.43 SCTP 52 SHUTDOWN_ACK 
   78 229.266566416   172.28.5.1 β†’ 192.168.122.43 SCTP 52 SHUTDOWN_ACK 
   79 229.266576215 192.168.122.43 β†’ 172.28.5.1   SCTP 52 SHUTDOWN_COMPLETE 
   80 229.266583435 192.168.122.43 β†’ 172.28.5.1   SCTP 52 SHUTDOWN_COMPLETE