Debugging Network Issues

57
Debugging Network Issues 4 things learned the hard way and by asking all my friends a bunch of questions.

Transcript of Debugging Network Issues

Page 1: Debugging Network Issues

Debugging Network Issues4 things learned the hard way and by asking all my friends a bunch of questions.

Page 2: Debugging Network Issues

Who is this guy?

● Jaime Piña● Software engineer at Apcera● Apcera platform deploys apps to hybrid cloud with policy● Work on Apcera Setup, gateways, and other things

(Hai-meh)

Page 3: Debugging Network Issues

Architecture (simplified)

Page 4: Debugging Network Issues

Microservices sit on the network.

One does not simply

use the network.

Page 5: Debugging Network Issues

Is the server plugged in?

(Is your app running?)

Page 6: Debugging Network Issues

Connection refused!

$ ssh jaime@localhost

ssh: connect to host localhost port 22: Connection refused

$ curl http://localhost

curl: (7) Failed to connect to localhost port 80: Connection refused

Page 7: Debugging Network Issues

Is there a firewall?

Page 8: Debugging Network Issues

Connection refused! (Part 2)

$ curl http://1.2.3.4

curl: (7) Failed to connect to 1.2.3.4 port 80: Connection refused

Page 9: Debugging Network Issues

Server side check with ufw

# ufw status

Status: active

To Action From

-- ------ ----

22 ALLOW Anywhere

Page 10: Debugging Network Issues

Connection refused! (Part 2)

$ curl http://1.2.3.4

curl: (7) Failed to connect to 1.2.3.4 port 80: Connection refused

Page 11: Debugging Network Issues

Server side check with iptables

A little more complicated.

Page 12: Debugging Network Issues

iptables vocabulary

● INPUT chain○ Incoming

● OUTPUT chain○ Outgoing

● ACCEPT action○ Allow

● DROP action○ Block

Page 13: Debugging Network Issues

iptables --listChain INPUT (policy DROP)target prot opt source destinationufw-user-input all -- anywhere anywhere

Chain ufw-user-input (1 references)target prot opt source destinationACCEPT tcp -- anywhere anywhere tcp dpt:sshACCEPT udp -- anywhere anywhere udp dpt:ssh

Page 14: Debugging Network Issues

Connection refused! (Part 2)

$ curl http://1.2.3.4

curl: (7) Failed to connect to 1.2.3.4 port 80: Connection refused

Page 15: Debugging Network Issues

Don’t have server access?

Page 16: Debugging Network Issues

Client side check with nmap

$ nmap scanme.nmap.orgNot shown: 971 closed portsPORT STATE SERVICE22/tcp open ssh5269/tcp filtered xmpp-server6007/tcp filtered X11:7

Page 17: Debugging Network Issues

nmap vocabulary

● open state○ Port accessible, app listening

● closed state○ Port accessible, no app listening

● filtered state○ IDK? ¯\_(ツ)_/¯

Page 18: Debugging Network Issues

Client side check with nmap

$ nmap scanme.nmap.orgNot shown: 971 closed portsPORT STATE SERVICE22/tcp open ssh5269/tcp filtered xmpp-server6007/tcp filtered X11:7

Page 19: Debugging Network Issues

Moar logs!

(And verbose output!)

Page 20: Debugging Network Issues

Triple verbose SSH

$ ssh -vvv [email protected]

Page 21: Debugging Network Issues

We can reach the server

debug2: resolving "foo.com" port 22debug1: Connecting to ejemplo.com [1.2.3.4] port 22.

debug1: Connection established.

Page 22: Debugging Network Issues

Trying to read my public key

debug1: key_load_public: No such file or directorydebug1: identity file /home/jaime/.ssh/id_rsa type -1debug1: key_load_public: No such file or directorydebug1: identity file /home/jaime/.ssh/id_ed25519 type -1

Page 23: Debugging Network Issues

Trying to use key authdebug1: Authentications that can continue: publickey,passworddebug1: Next authentication method: publickey

debug1: Trying private key: /home/jaime/.ssh/id_rsadebug3: no such identity: /home/jaime/.ssh/id_rsa: No such file or directorydebug1: Trying private key: /home/jaime/.ssh/id_ed25519debug3: no such identity: /home/jaime/.ssh/id_ed25519: No such file or directory

Page 24: Debugging Network Issues

Trying to use password auth

debug1: Next authentication method: password

[email protected]'s password:

Page 25: Debugging Network Issues

systemd

journalctl --unit ssh.service

Page 26: Debugging Network Issues

Careful with DNS

Page 27: Debugging Network Issues

DNS

The thing that turns English words into numbers.

Input: www.google.com

Output: 172.217.6.36

Page 28: Debugging Network Issues

The thing is

DNS is not required for working internet.

Page 29: Debugging Network Issues

One day...# rkt run --insecure-options=image --interactive docker://ubuntu:14.04root@rkt:/# apt-get update

Err http://archive.ubuntu.com trusty-updates InReleaseErr http://archive.ubuntu.com trusty-security InReleaseErr http://archive.ubuntu.com trusty-updates Release.gpg Could not resolve 'archive.ubuntu.com'Err http://archive.ubuntu.com trusty-security Release.gpg Could not resolve 'archive.ubuntu.com'Reading package lists... DoneW: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-updates/InReleaseW: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-security/InRelease

Page 30: Debugging Network Issues

What’s happening??

Page 31: Debugging Network Issues

Is the internet cable plugged in?

Page 32: Debugging Network Issues

What’s happening??

Page 33: Debugging Network Issues

Closer lookErr http://archive.ubuntu.com trusty-updates Release.gpg Could not resolve 'archive.ubuntu.com'Err http://archive.ubuntu.com trusty-security Release.gpg Could not resolve 'archive.ubuntu.com'Reading package lists... DoneW: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-updates/InReleaseW: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-security/InRelease

Page 34: Debugging Network Issues

Test for success

root@rkt:/# ping -c 1 172.217.6.36PING 172.217.6.36 (172.217.6.36) 56(84) bytes of data.64 bytes from 172.217.6.36: icmp_seq=1 ttl=49 time=26.2 ms--- 172.217.6.36 ping statistics ---1 packets transmitted, 1 received, 0% packet loss, time 0msrtt min/avg/max/mdev = 26.297/26.297/26.297/0.000 ms

Page 35: Debugging Network Issues

Test for failure

root@rkt:/# ping -c 1 www.google.comping: unknown host www.google.com

Page 36: Debugging Network Issues

OMG it’s the DNS!

Page 37: Debugging Network Issues
Page 38: Debugging Network Issues

Fix

rkt run --insecure-options=image --dns 8.8.8.8 --interactive docker://ubuntu:14.04

Page 39: Debugging Network Issues

Worked.

Page 40: Debugging Network Issues

How to get DNS info?

drill (or dig)

Page 41: Debugging Network Issues

drill usage

drill name [@nameserver] [record type]

Page 42: Debugging Network Issues

DNS vocabulary

● nameserver○ Server who has DNS info about a domain

● A record○ Contains IP address for a domain

● NS record○ Contains nameservers for a domain

Page 43: Debugging Network Issues

drill example

$ drill www.google.com @8.8.8.8 A;; QUESTION SECTION:;; www.google.com. IN A

;; ANSWER SECTION:www.google.com. 297 IN A 172.217.6.36

Page 44: Debugging Network Issues

Packet inspection

(I do not think you’re sending what you think you’re sending.)

Page 45: Debugging Network Issues
Page 46: Debugging Network Issues

tcpdump syntax

tcpdump [options] 'BPF'

Page 47: Debugging Network Issues

tcpdump basic usage

tcpdump -i lo 'BPF'

More: tcpdump --list-interfaces

Page 48: Debugging Network Issues

Berkeley Packet Filter

● host foo.com○ src/dst host is foo.com

● tcp port 22○ TCP traffic coming/going to port 22

● dst port 53○ Traffic going to port 53

Page 49: Debugging Network Issues

tcpdump example# tcpdump -i wlp58s0 'tcp port 80'192.168.0.109.37370 > 107.170.18.175.http: Flags [S], length 0107.170.18.175.http > 192.168.0.109.37370: Flags [S.], length 0192.168.0.109.37370 > 107.170.18.175.http: Flags [.], length 0

Flags:

S = SYN . = ACK

Me -SYN-> serverMe <-SYN ACK- serverMe -ACK-> server

Page 50: Debugging Network Issues

World Famous

Three-way Handshake

Page 51: Debugging Network Issues
Page 52: Debugging Network Issues

tcpdump flag Flag name Description

S SYN Signal start of connection

. ACK Acknowledge packet

P PSH Sending data

F FIN Signal end of connection

R RST Connection killed

Common packet flags

Page 53: Debugging Network Issues

ngrep syntax

ngrep [options] 'pattern' 'BPF'

Page 54: Debugging Network Issues

ngrep example

# ngrep -q -Wbyline "HTTP" "tcp port 80"T 192.168.0.109:59990 -> 107.170.18.175:80 [AP]POST /portfolio/wp-login.php HTTP/1.1.Accept-Encoding: gzip, deflate..log=HELLO&pwd=WORLD&wp-submit=Log+In&redirect_to=http%3A%2F%2Ffoo.com%2Fportfolio%2Fwp-admin%2F&testcookie=1

Page 55: Debugging Network Issues

Credentials

log=HELLO&pwd=WORLD

Page 56: Debugging Network Issues

How to debug (some) network issues

● Is your app running?● Is there a firewall?● Does the DNS work?● Are you sending and receiving what you think you

are?

Page 57: Debugging Network Issues

Thanks

Jaime Piña

Software engineer at Apcera

@variadico