Analysis of Docker Local Networking · Bonn-Rhein-Sieg Prof. Dr. Martin Leischner Netzwerksysteme...

16
Hochschule Bonn-Rhein-Sieg Prof. Dr. Martin Leischner Netzwerksysteme und TK 04.07.2018 13:49:41 © M. Leischner Servicemanagement in Netzen Folie 1 DeepDive: Analysis of Docker Local Networking

Transcript of Analysis of Docker Local Networking · Bonn-Rhein-Sieg Prof. Dr. Martin Leischner Netzwerksysteme...

Page 1: Analysis of Docker Local Networking · Bonn-Rhein-Sieg Prof. Dr. Martin Leischner Netzwerksysteme und TK Docker local networking structure ... ip route show table main/ ip route show

Hochschule

Bonn-Rhein-Sieg

Prof. Dr. Martin Leischner

Netzwerksysteme und TK

04.07.2018 13:49:41

© M. Leischner Servicemanagement in Netzen Folie 1

DeepDive:

Analysis of Docker Local

Networking

Page 2: Analysis of Docker Local Networking · Bonn-Rhein-Sieg Prof. Dr. Martin Leischner Netzwerksysteme und TK Docker local networking structure ... ip route show table main/ ip route show

Hochschule

Bonn-Rhein-Sieg

Prof. Dr. Martin Leischner

Netzwerksysteme und TK

Docker local networking structure

The docker local networking structure is very complex

Every docker container running on the local system is a communicating micro

service

A lot of interfaces

Local virtual networks build by bridged subnets

Internal routing and gateway routing

Building blocks of the local networking infrastructure

Interfaces ip addr show / ip a

Bridges brctl show

Subnets

via interfaces

Routing tables

ip route show table main / ip route show / ip r :

Content of routing table main manageable by an administrator. Useful in most cases.

ip route show table local :

routing table of local addresses managed by the kernel

04.07.2018 13:49:41Servicemanagement in Netzen Folie 2

http://www.system-rescue-cd.org/networking/Advanced-networking-and-policy-routing/

https://diego.assencio.com/?index=d71346b8737ee449bb09496784c9b344

Page 3: Analysis of Docker Local Networking · Bonn-Rhein-Sieg Prof. Dr. Martin Leischner Netzwerksysteme und TK Docker local networking structure ... ip route show table main/ ip route show

Hochschule

Bonn-Rhein-Sieg

Prof. Dr. Martin Leischner

Netzwerksysteme und TK

Our network analysis methodology

Building the docker infrastructure step-by-step:

1. basis: Ubuntu server 16.04. with one standard dhcp-interface (and with

ssh)

2. add: docker server/client (no container)

3. add: running one simple container providing a webserver on port 80

4. initialize docker swarm

Analyze every building step by (only IPv4):

Interfaces

Bridges and subnets

Routing table

Connections and listening ports :

netstat –an use grep in addition if necessary

-a all active unix sockets, -t tcp sockets, -u udp sockets

-n show ports as numbers (instead of resolving dns)

-l only ports bound to listen

-p show program name / PID

04.07.2018 13:49:41Servicemanagement in Netzen Folie 3

Page 4: Analysis of Docker Local Networking · Bonn-Rhein-Sieg Prof. Dr. Martin Leischner Netzwerksysteme und TK Docker local networking structure ... ip route show table main/ ip route show

Hochschule

Bonn-Rhein-Sieg

Prof. Dr. Martin Leischner

Netzwerksysteme und TK

Step 1: Ubuntu server 16.04. only with one dhcp-interface

Interfaces

Bridges and subnets: none

04.07.2018 13:49:41Servicemanagement in Netzen Folie 4

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN

group default qlen 1

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP

group default qlen 1000

link/ether 00:0c:27:da:44:33 brd ff:ff:ff:ff:ff:ff

inet 192.168.172.50/24 brd 192.168.172.255 scope global ens33

valid_lft forever preferred_lft forever

Page 5: Analysis of Docker Local Networking · Bonn-Rhein-Sieg Prof. Dr. Martin Leischner Netzwerksysteme und TK Docker local networking structure ... ip route show table main/ ip route show

Hochschule

Bonn-Rhein-Sieg

Prof. Dr. Martin Leischner

Netzwerksysteme und TK

Step 1: Ubuntu server 16.04. only with one dhcp-interface

Routing table (ip r)

Listening ports ( via netstat –tulp )

04.07.2018 13:49:41Servicemanagement in Netzen Folie 5

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp 0 0 *:ssh *:* LISTEN 1195/sshd

tcp6 0 0 [::]:ssh [::]:* LISTEN 1195/sshd

udp 0 0 *:bootpc *:* 1069/dhclient

default via 192.168.172.1 dev ens33

192.168.172.0/24 dev ens33 proto kernel scope link src 192.168.172.50

Page 6: Analysis of Docker Local Networking · Bonn-Rhein-Sieg Prof. Dr. Martin Leischner Netzwerksysteme und TK Docker local networking structure ... ip route show table main/ ip route show

Hochschule

Bonn-Rhein-Sieg

Prof. Dr. Martin Leischner

Netzwerksysteme und TK

Step 2: Ubuntu server 16.04. with pure docker client/server

Interfaces

Questions on docker0 Interface:

How to interpret interface docker0 in this context?

Why is it down?

04.07.2018 13:49:41Servicemanagement in Netzen Folie 6

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN

group default qlen 1

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP

group default qlen 1000

link/ether 00:0c:27:da:44:33 brd ff:ff:ff:ff:ff:ff

inet 192.168.172.50/24 brd 192.168.172.255 scope global ens33

valid_lft forever preferred_lft forever

3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN

group default

link/ether 02:42:a5:fc:1c:e7 brd ff:ff:ff:ff:ff:ff

inet 172.17.0.1/16 scope global docker0

valid_lft forever preferred_lft forever

Page 7: Analysis of Docker Local Networking · Bonn-Rhein-Sieg Prof. Dr. Martin Leischner Netzwerksysteme und TK Docker local networking structure ... ip route show table main/ ip route show

Hochschule

Bonn-Rhein-Sieg

Prof. Dr. Martin Leischner

Netzwerksysteme und TK

Step 2: Ubuntu server 16.04. with pure docker client/server

Bridges and subnets

Questions on bridge docker0:

Why are there no interfaces?

Which subnet belongs to bridge docker0 ?

Can you give a coherent explanation of the relationship between docker0-Bridge and

docker0-Interface?

Routing table (ip r):

04.07.2018 13:49:41Servicemanagement in Netzen Folie 7

bridge name bridge id STP enabled interfaces

docker0 8000.0242a5fc1ce7 no

default via 192.168.172.1 dev ens33

172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown

192.168.172.0/24 dev ens33 proto kernel scope link src 192.168.172.50

Page 8: Analysis of Docker Local Networking · Bonn-Rhein-Sieg Prof. Dr. Martin Leischner Netzwerksysteme und TK Docker local networking structure ... ip route show table main/ ip route show

Hochschule

Bonn-Rhein-Sieg

Prof. Dr. Martin Leischner

Netzwerksysteme und TK

Step 2: Ubuntu server 16.04. with pure docker client/server

Listening ports ( via netstat –tulp )

Connections ( via netstat –tunp )

Connections ( via netstat –tup )

04.07.2018 13:49:41Servicemanagement in Netzen Folie 8

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program

name

tcp 0 0 *:ssh *:* LISTEN 1223/sshd

udp 0 0 *:bootpc *:* 1094/dhclient

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp 0 64 192.168.172.50:22 192.168.172.21:61400 VERBUNDEN 1866/0

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp 0 64 testserver.fritz.bo:ssh PC-Work.fritz.box:61400 VERBUNDEN 1866/0

Page 9: Analysis of Docker Local Networking · Bonn-Rhein-Sieg Prof. Dr. Martin Leischner Netzwerksysteme und TK Docker local networking structure ... ip route show table main/ ip route show

Hochschule

Bonn-Rhein-Sieg

Prof. Dr. Martin Leischner

Netzwerksysteme und TK

Step 3: Ubuntu server 16.04. running one simple container

Interfaces

Questions: Where is interface 4? What means veth@if4 ?

04.07.2018 13:49:41Servicemanagement in Netzen Folie 9

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN

group default qlen 1

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP

group default qlen 1000

link/ether 00:0c:27:da:44:33 brd ff:ff:ff:ff:ff:ff

inet 192.168.172.50/24 brd 192.168.172.255 scope global ens33

valid_lft forever preferred_lft forever

3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue

state UP group default

link/ether 02:42:4a:fc:30:43 brd ff:ff:ff:ff:ff:ff

inet 172.17.0.1/16 scope global docker0

valid_lft forever preferred_lft forever

5: veth26708e5@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0

state UP group default

link/ether 2e:68:00:72:45:c6 brd ff:ff:ff:ff:ff:ff link-netnsid 0

Page 10: Analysis of Docker Local Networking · Bonn-Rhein-Sieg Prof. Dr. Martin Leischner Netzwerksysteme und TK Docker local networking structure ... ip route show table main/ ip route show

Hochschule

Bonn-Rhein-Sieg

Prof. Dr. Martin Leischner

Netzwerksysteme und TK

Results summarized in a figure

04.07.2018 13:49:41Servicemanagement in Netzen Folie 10

Page 11: Analysis of Docker Local Networking · Bonn-Rhein-Sieg Prof. Dr. Martin Leischner Netzwerksysteme und TK Docker local networking structure ... ip route show table main/ ip route show

Hochschule

Bonn-Rhein-Sieg

Prof. Dr. Martin Leischner

Netzwerksysteme und TK

Step 3: Ubuntu server 16.04. running one simple container

Bridges and subnets

Routing table (ip r)

Listening ports ( via netstat –tulp )

04.07.2018 13:49:41Servicemanagement in Netzen Folie 11

bridge name bridge id STP enabled interfaces

docker0 8000.02424afc3043 no veth26708e5

default via 192.168.172.1 dev ens33

172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown

192.168.172.0/24 dev ens33 proto kernel scope link src 192.168.172.50

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp 0 0 *:ssh *:* LISTEN 1229/sshd

tcp6 0 0 [::]:9010 [::]:* LISTEN 1600/docker-proxy

tcp6 0 0 [::]:ssh [::]:* LISTEN 1229/sshd

udp 0 0 *:bootpc *:* 1111/dhclient

Zugriff auch mit IPv4

möglich!

Page 12: Analysis of Docker Local Networking · Bonn-Rhein-Sieg Prof. Dr. Martin Leischner Netzwerksysteme und TK Docker local networking structure ... ip route show table main/ ip route show

Hochschule

Bonn-Rhein-Sieg

Prof. Dr. Martin Leischner

Netzwerksysteme und TK

Step 3: Ubuntu server 16.04. running one simple container

Go inside the container and look around!

Interfaces

Bridges and subnets: none

Routing table (ip r)

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

4: eth0@if5: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP

link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff

inet 172.17.0.2/16 scope global eth0

valid_lft forever preferred_lft forever

default via 172.17.0.1 dev eth0

172.17.0.0/16 dev eth0 src 172.17.0.2

04.07.2018 13:49:41Servicemanagement in Netzen Folie 12

Page 13: Analysis of Docker Local Networking · Bonn-Rhein-Sieg Prof. Dr. Martin Leischner Netzwerksysteme und TK Docker local networking structure ... ip route show table main/ ip route show

Hochschule

Bonn-Rhein-Sieg

Prof. Dr. Martin Leischner

Netzwerksysteme und TK

Step 3: Ubuntu server 16.04. running one simple container

Listening ports ( via netstat –tulp )

Running processes within the cadvisor container

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp 0 0 :::http-alt :::* LISTEN 1/cadvisor

Started with PID 1

PID USER TIME COMMAND

1 root 1:56 /usr/bin/cadvisor -logtostderr

69 root 0:00 sh

116 root 0:00 ps -e

04.07.2018 13:49:41Servicemanagement in Netzen Folie 13

Page 14: Analysis of Docker Local Networking · Bonn-Rhein-Sieg Prof. Dr. Martin Leischner Netzwerksysteme und TK Docker local networking structure ... ip route show table main/ ip route show

Hochschule

Bonn-Rhein-Sieg

Prof. Dr. Martin Leischner

Netzwerksysteme und TK

Step 4: Ubuntu server 16.04. + docker swarm init

Interfaces

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

link/ether 00:0c:27:da:44:33 brd ff:ff:ff:ff:ff:ff

inet 192.168.172.50/24 brd 192.168.172.255 scope global ens33

valid_lft forever preferred_lft forever

3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default

link/ether 02:42:4a:fc:30:43 brd ff:ff:ff:ff:ff:ff

inet 172.17.0.1/16 scope global docker0

valid_lft forever preferred_lft forever

5: veth26708e5@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP

group default

link/ether 2e:68:00:72:45:c6 brd ff:ff:ff:ff:ff:ff link-netnsid 0

10: docker_gwbridge: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default

link/ether 02:42:1e:bb:07:56 brd ff:ff:ff:ff:ff:ff

inet 172.18.0.1/16 scope global docker_gwbridge

valid_lft forever preferred_lft forever

12: vethfcf6969@if11: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker_gwbridge

state UP group default

link/ether 4e:5c:4e:be:c8:c7 brd ff:ff:ff:ff:ff:ff link-netnsid 2

04.07.2018 13:49:41Servicemanagement in Netzen Folie 14

Page 15: Analysis of Docker Local Networking · Bonn-Rhein-Sieg Prof. Dr. Martin Leischner Netzwerksysteme und TK Docker local networking structure ... ip route show table main/ ip route show

Hochschule

Bonn-Rhein-Sieg

Prof. Dr. Martin Leischner

Netzwerksysteme und TK

Step 4: Ubuntu server 16.04. + docker swarm init

Bridges and subnets

Routing table (ip r)

bridge name bridge id STP enabled interfaces

docker0 8000.02424afc3043 no veth26708e5

docker_gwbridge 8000.02421ebb0756 no vethfcf6969

default via 192.168.172.1 dev ens33

172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1

172.18.0.0/16 dev docker_gwbridge proto kernel scope link src 172.18.0.1

192.168.172.0/24 dev ens33 proto kernel scope link src 192.168.172.50

04.07.2018 13:49:41Servicemanagement in Netzen Folie 15

Page 16: Analysis of Docker Local Networking · Bonn-Rhein-Sieg Prof. Dr. Martin Leischner Netzwerksysteme und TK Docker local networking structure ... ip route show table main/ ip route show

Hochschule

Bonn-Rhein-Sieg

Prof. Dr. Martin Leischner

Netzwerksysteme und TK

Step 4: Ubuntu server 16.04. + docker swarm init

Listening ports ( via netstat –tulp )

Port 2377: For swarm managers. (Clients use port 2376 via TLS.)

Port 4789: UDP for the container overlay network.

Port 7946: TCP/UDP for container network discovery.

Dangerous (but very practical): Open Port 2375 (unencrypted docker socket) fpr

remote passwordless client access to the host.

Better solution: Use port 2376 via TLS for client access.

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp 0 0 *:ssh *:* LISTEN 1229/sshd

tcp6 0 0 [::]:2377 [::]:* LISTEN 1238/dockerd

tcp6 0 0 [::]:7946 [::]:* LISTEN 1238/dockerd

tcp6 0 0 [::]:9010 [::]:* LISTEN 1600/docker-proxy

tcp6 0 0 [::]:ssh [::]:* LISTEN 1229/sshd

udp 0 0 *:4789 *:* -

udp 0 0 *:bootpc *:* 1111/dhclient

udp6 0 0 [::]:7946 [::]:* 1238/dockerd

04.07.2018 13:49:41Servicemanagement in Netzen Folie 16