IT-Wissen/linux/linux-netzwerk.md

233 lines
10 KiB
Markdown
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
gitea: none
include_toc: true
---
# Linux Netzwerk
## Interface
Jedes Interface hat einen eigenen Namen welches konfiguriert werden muss
- `en*`: Physisches Ethernet Interface
- `wl*`: Physisches WLAN Interface
- `ww*`: Physiche WWAN Interace (Cellphone Card, Network Address)
- `eth*`: Virtuelles Interface (VMs, Cloud Instanzen)
- `vir*`: VirtualBox
`route` shows used Interface.
## Get hostname
```
hostname
```
## Get public IP address
IPv4:
```
dig TXT +short o-o.myaddr.l.google.com @ns1.google.com
or
host myip.opendns.com resolver1.opendns.com
```
IPv6:
```
dig -6 TXT +short o-o.myaddr.l.google.com @ns1.google.com
```
---
## Ports
### List of reserved port numbers
`less /etc/services`
### All open/listening ports
#### Solution 1
`sudo lsof -i -P -n | grep LISTEN`
Shows the following columns:
| Column | Description |
| --- | --- |
| COMMAND | The name of the command or executable associated with the process. |
| PID | The process ID of the listening process. |
| USER | The user who owns the process. |
| FD | The file descriptor associated with this process (4u indicates it's an open file/socket). |
| TYPE | The type of file, usually STREAM for TCP or DGRAM for UDP. |
| DEVICE | Internal device number (used by the operating system, not directly meaningful to users). |
| SIZE/OFF | The size or offset (not meaningful for listening sockets, so it's 0). |
| NODE | The protocol being used. |
| NAME | The address and port being listened to in the format <IP>:<PORT> or *:<PORT>. |
```
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE
systemd-r 669 systemd-resolve 13u IPv4 22780 0t0 TCP 127.0.0.53:53 (LISTEN)
named 745 bind 56u IPv4 23775 0t0 TCP 127.0.0.1:953 (LISTEN)
named 745 bind 63u IPv4 24658 0t0 TCP 194.13.82.60:53 (LISTEN)
named 745 bind 64u IPv4 24659 0t0 TCP 194.13.82.60:53 (LISTEN)
named 745 bind 65u IPv4 24660 0t0 TCP 194.13.82.60:53 (LISTEN)
named 745 bind 68u IPv4 24661 0t0 TCP 194.13.82.60:53 (LISTEN)
[...]
sshd 857 root 3u IPv4 26786 0t0 TCP *:22 (LISTEN)
sshd 857 root 4u IPv6 26788 0t0 TCP *:22 (LISTEN)
docker-pr 1243 root 4u IPv4 25440 0t0 TCP *:3307 (LISTEN)
docker-pr 1250 root 4u IPv4 28091 0t0 TCP *:9823 (LISTEN)
docker-pr 1252 root 4u IPv4 24336 0t0 TCP *:80 (LISTEN)
docker-pr 1253 root 4u IPv4 28820 0t0 TCP *:9877 (LISTEN)
docker-pr 1292 root 4u IPv6 28094 0t0 TCP *:9823 (LISTEN)
docker-pr 1294 root 4u IPv6 28102 0t0 TCP *:9877 (LISTEN)
docker-pr 1299 root 4u IPv6 28827 0t0 TCP *:3307 (LISTEN)
docker-pr 1300 root 4u IPv6 24339 0t0 TCP *:80 (LISTEN)
docker-pr 1316 root 4u IPv4 29795 0t0 TCP *:81 (LISTEN)
docker-pr 1353 root 4u IPv6 29805 0t0 TCP *:81 (LISTEN)
docker-pr 1390 root 4u IPv4 25492 0t0 TCP *:443 (LISTEN)
docker-pr 1414 root 4u IPv6 29815 0t0 TCP *:443 (LISTEN)
docker-pr 619804 root 4u IPv4 69012855 0t0 TCP *:8888 (LISTEN)
docker-pr 619813 root 4u IPv6 69010893 0t0 TCP *:8888 (LISTEN)
sshd 1330510 rogrut 10u IPv6 82082832 0t0 TCP [::1]:6010 (LISTEN)
sshd 1330510 rogrut 11u IPv4 82082833 0t0 TCP 127.0.0.1:6010 (LISTEN)
docker-pr 1343733 root 4u IPv4 82190331 0t0 TCP *:2222 (LISTEN)
docker-pr 1343740 root 4u IPv6 82188025 0t0 TCP *:2222 (LISTEN)
docker-pr 1343747 root 4u IPv4 82188950 0t0 TCP *:3000 (LISTEN)
docker-pr 1343754 root 4u IPv6 82185088 0t0 TCP *:3000 (LISTEN)
docker-pr 2890708 root 4u IPv4 46563836 0t0 TCP *:8806 (LISTEN)
docker-pr 2890715 root 4u IPv6 46564648 0t0 TCP *:8806 (LISTEN)
```
#### Solution 2
`sudo netstat -tulpn | grep LISTEN`
```
-t select all TCP ports
-u select all UDP ports
-l show listening server sockets (open TCP and UDP ports in listing state)
-p Display PID/Program name for sockets. In other words, this option tells who opened the TCP or UDP port. For example, on my system, Nginx opened TCP port 80/443, so I will /usr/sbin/nginx or its PID.
-n Dont resolve name (avoid dns lookup, this speed up the netstat on busy Linux/Unix servers)
```
Sortiert zuerst IPv4 danach IPv6
| Column | Example Value | Description |
| --- | --- | --- |
| Proto | tcp | The protocol in use, e.g., tcp (Transmission Control Protocol) or udp (User Datagram Protocol). |
| Recv-Q | 0 | The receive queue size: The number of bytes waiting to be read by the application. Usually 0. |
| Send-Q | 0 | The send queue size: The number of bytes waiting to be acknowledged by the remote host. Usually 0. |
| Local Address | 0.0.0.0:81 | The local address and port the process is bound to:<br/>- 0.0.0.0 means the process listens on all IPv4 interfaces.<br/>- :81 is the port number being listened on. |
| Foreign Address | 0.0.0.0:* | The remote address and port the socket is connected to:<br/>- 0.0.0.0:* indicates no remote connection yet (listening state). |
| State | LISTEN | The connection state. LISTEN means the process is waiting for incoming connections. |
| PID/Program name | 1316/docker-proxy | The process ID (PID) and program name of the process handling this connection:<br/>- 1316 is the unique process ID.<br/>- docker-proxy is the name of the program managing the socket. |
```
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:81 0.0.0.0:* LISTEN 1316/docker-proxy
tcp 0 0 0.0.0.0:9877 0.0.0.0:* LISTEN 1253/docker-proxy
tcp 0 0 194.13.82.60:53 0.0.0.0:* LISTEN 745/named
tcp 0 0 194.13.82.60:53 0.0.0.0:* LISTEN 745/named
tcp 0 0 194.13.82.60:53 0.0.0.0:* LISTEN 745/named
tcp 0 0 194.13.82.60:53 0.0.0.0:* LISTEN 745/named
tcp 0 0 194.13.82.60:53 0.0.0.0:* LISTEN 745/named
tcp 0 0 194.13.82.60:53 0.0.0.0:* LISTEN 745/named
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 669/systemd-resolve
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 857/sshd: /usr/sbin
tcp 0 0 0.0.0.0:3000 0.0.0.0:* LISTEN 1343747/docker-prox
tcp 0 0 0.0.0.0:8888 0.0.0.0:* LISTEN 619804/docker-proxy
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 745/named
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 745/named
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 745/named
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 745/named
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 745/named
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 745/named
tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN 1330510/sshd: rogru
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 1390/docker-proxy
tcp 0 0 0.0.0.0:9823 0.0.0.0:* LISTEN 1250/docker-proxy
tcp 0 0 0.0.0.0:8806 0.0.0.0:* LISTEN 2890708/docker-prox
tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 1243/docker-proxy
tcp 0 0 0.0.0.0:2222 0.0.0.0:* LISTEN 1343733/docker-prox
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1252/docker-proxy
tcp6 0 0 :::81 :::* LISTEN 1353/docker-proxy
tcp6 0 0 :::9877 :::* LISTEN 1294/docker-proxy
tcp6 0 0 ::1:53 :::* LISTEN 745/named
[...]
```
### Specific port
`sudo lsof -i:8805`
```
docker-pr 3613260 root 4u IPv4 424274374 0t0 TCP *:8805 (LISTEN)
docker-pr 3613267 root 4u IPv6 424276198 0t0 TCP *:8805 (LISTEN)
```
### In a bash script
Testing if a port is open from a bash script
One can use the `/dev/tcp/{HostName}_OR_{IPAddrress}>/{port}` syntax to check if a TCP port is open on a Linux or Unix machine when using Bash. In other words, the following is Bash specific feature. Let us see if TCP port `20` is open on `localhost` and `192.168.2.20`:
```shell
(echo >/dev/tcp/localhost/23) &>/dev/null && echo "open" || echo "close"
(echo >/dev/tcp/192.168.2.20/22) &>/dev/null && echo "open" || echo "close"
```
Now we can build some logic as follows:
```shell
#!/bin/bash
dest_box="aws-prod-server-42"
echo "Testing the ssh connectivity ... "
if ! (echo >/dev/tcp/$dest_box/22) &>/dev/null
then
echo "$0 cannot connect to the $dest_box. Check your vpn connectivity."
else
echo "Running the ansible playboook ..."
ansible-playbook -i hosts --ask-vault-pass --extra-vars '@cluster.data.yml' main.yaml
fi
```
## Network configuration with nmcli
### Show available wifi
```shell
nmcli device wifi list
```
### show network interfaces on computer
```shell
ip link show
# or
nmcli device
```
### show interface information
Shows table with local IP, Gateway IP, DNS IP, network name etc.
```
nmcli con show
NAME UUID TYPE DEVICE
RR_Net 9a0bf331-2197-478e-aaef-8bdb0da7daef wifi wlp1s0
```
```
nmcli dev show
```
For hardware info:
```
lshw -C network
```