Încerc să ajung la instanța mea Nextcloud (fpm în spatele nginx) printr-un VPN wireguard, ambele rulând într-un container docker.
Docker-compose.yml meu arată astfel:
versiunea: "3.9"
Servicii:
nextcloud:
imagine: nextcloud
container_name: nextcloud
reporniți: întotdeauna
mediu inconjurator:
POSTGRES_DB: nextcloud
POSTGRES_USER: postgres
POSTGRES_PASSWORD: xxxxxxxxx
POSTGRES_HOST: postgres
NEXTCLOUD_DATA_DIR: /date
volume:
- /mnt/data/nextcloud:/var/www/html
- /mnt/data/files:/data
depinde de:
- postgres
web:
imagine: nginx:latest
container_name: web
reporniți: întotdeauna
volume:
- /mnt/data/nextcloud:/var/www/html:ro
- /srv/nextcloud/nginx.conf:/etc/nginx/nginx.conf
expune:
- "80"
porturi:
- „80:80”
depinde de:
- nextcloud
apărătoare de sârmă:
imagine: docker.myownregistry.xy/wireguard:latest
container_name: wireguard
restart: „dacă nu este oprit”
mediu inconjurator:
- PUID=1000
- PGID=1000
- TZ=Europa/Berlin
- PORT_FORWARDS=web:80
volume:
- /srv/wireguard/wg0.conf:/config/wg0.conf
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
- net.ipv4.ip_forward=1
depinde de:
- web
iptable-urile arată astfel:
# docker exec -it wireguard iptables -t nat -L -n -v
PRERUTARE în lanț (politica ACCEPT 0 pachete, 0 octeți)
pkts bytes target prot opt in out source destination
0 0 DNAT tcp
INTRARE în lanț (politica ACCEPT 0 pachete, 0 octeți)
pkts bytes target prot opt in out source destination
Ieșire în lanț (politica ACCEPT 0 pachete, 0 octeți)
pkts bytes target prot opt in out source destination
6 424 DOCKER_OUTPUT toate
POSTROUTING în lanț (politica ACCEPTĂ 2 pachete, 160 de octeți)
pkts bytes target prot opt in out source destination
6 424 DOCKER_POSTROUTING toate
0 0 SNAT tcp
Lanț DOCKER_OUTPUT (1 referințe)
pkts bytes target prot opt in out source destination
0 0 DNAT tcp
6 424 DNAT udp
Lanț DOCKER_POSTROUTING (1 referințe)
pkts bytes target prot opt in out source destination
0 0 SNAT tcp
0 0 SNAT udp
# docker exec -it wireguard iptables -L -n -v
INTRARE în lanț (politica ACCEPTĂ 4 pachete, 381 de octeți)
pkts bytes target prot opt in out source destination
Lanț FORWARD (politica ACCEPT 0 pachete, 0 octeți)
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp
0 0 ACCEPT toate
0 0 ACCEPT toate
IEȘIRE în lanț (politica ACCEPTĂ 7 pachete, 561 de octeți)
pkts bytes target prot opt in out source destination
În primul rând, pot trimite un ping peer-ului wireguard de la VPN și pot obține răspunsuri.
Când trimit o solicitare HTTP către IP-ul egal, cererea apare în jurnalul nginx și clientul http rămâne blocat în așteptarea unui răspuns.
Un dump TCP arată că cererea HTTP GET este de fapt redirecționată, dar răspunsul serverului nu (reîncearcă de mai multe ori):
tcpdump: ieșirea verbosă a fost suprimată, utilizați -v sau -vv pentru decodarea completă a protocolului
ascultare pe wg0, tip link RAW (IP brut), dimensiunea capturii 262144 octeți
13:10:05.319590 IP WG_CLIENT_IP.39952 > WG_PEER_IP.80: steaguri [S], seq 2013357617, win 64860, opțiuni [mss 1380,sackOK,TS val 625358004no ecrscale, lungime 70pcrs004]
13:10:05.319809 IP WG_PEER_IP.80 > WG_CLIENT_IP.39952: Flags [S.], seq 2024405621, ack 2013357618, win 28960, options [mss 146TScale, ewscale 14670474, eck 14670500, eck 2013357618
13:10:05.337819 IP WG_CLIENT_IP.39952 > WG_PEER_IP.80: steaguri [.], confirmare 1, câștig 507, opțiuni [nop,nop,TS val 625358524 ecr 4067727362], lungime
13:10:05.337939 IP WG_CLIENT_IP.39952 > WG_PEER_IP.80: Flags [P.], seq 1:75, ack 1, win 507, options [nop,nop,TS val 625358525 ecr: HTTP 4062772] / HTTP/1.1
13:10:05.338016 IP WG_PEER_IP.80 > WG_CLIENT_IP.39952: steaguri [.], ack 75, win 227, options [nop,nop,TS val 4067727380 ecr 6253585025]
13:10:05.601611 IP WG_PEER_IP.80 > WG_CLIENT_IP.39952: Flags [P.], seq 1:1413, ack 75, win 227, options [nop,nop,TS val 4067727644] HTTP: HTTP ecr2 1625 lungime: 4 ecr2 1625] /1.1 302 Găsit
13:10:05.621031 IP WG_CLIENT_IP.39952 > WG_PEER_IP.80: steaguri [.], ack 1, win 507, opțiuni [nop,nop,TS val 625358808 ecr 4067727380,nop1,3}1,3} lungime 0
13:10:05.655547 IP WG_PEER_IP.80 > WG_CLIENT_IP.39952: Flags [.], seq 1:1369, ack 75, win 227, options [nop,nop,TS val 4067727697]3 HTTP/ ecr881697]3 ecr881625]3 1.1 302 Găsit
13:10:05.885450 IP WG_PEER_IP.80 > WG_CLIENT_IP.39952: Flags [.], seq 1:1369, ack 75, win 227, options [nop,nop,TS val 4067727928]3 HTTP/ ecr 881625]3 1.1 302 Găsit
13:10:06.335429 IP WG_PEER_IP.80 > WG_CLIENT_IP.39952: Flags [.], seq 1:1369, ack 75, win 227, options [nop,nop,TS val 4067728378]3 HTTP/ ecr8818625]3 1.1 302 Găsit
13:10:07.245449 IP WG_PEER_IP.80 > WG_CLIENT_IP.39952: Flags [.], seq 1:1369, ack 75, win 227, options [nop,nop,TS val 4067729288]3 HTTP/ ecr 8 81 625] 1.1 302 Găsit
13:10:09.086287 IP WG_PEER_IP.80 > WG_CLIENT_IP.39952: Flags [.], seq 1:1369, ack 75, win 227, options [nop,nop,TS val 4067731129]3 HTTP/ ecr8 81125] 1.1 302 Găsit
13:10:12.685537 IP WG_PEER_IP.80 > WG_CLIENT_IP.39952: Flags [.], seq 1:1369, ack 75, win 227, options [nop,nop,TS val 4067734731]3 HTTP/ ecr8 81625] 1.1 302 Găsit
13:10:20.365456 IP WG_PEER_IP.80 > WG_CLIENT_IP.39952: Flags [.], seq 1:1369, ack 75, win 227, options [nop,nop,TS val 4067742416]3 HTTP/ ecr8 81625] 1.1 302 Găsit
13:10:35.086342 IP WG_PEER_IP.80 > WG_CLIENT_IP.39952: Flags [.], seq 1:1369, ack 75, win 227, options [nop,nop,TS val 4067757152]3 HTTP/ ecr881525]3: HTTP/ ecr881686 1.1 302 Găsit
...
Lucrul ciudat este că atunci când rulez un simplu server echo http (de exemplu: ealen/echo-server care utilizează nodejs express), în schimb, pot ajunge la el prin VPN fără complicații.
De asemenea, nu a funcționat când foloseam containerul nextcloud cu un server apache inclus.
EDITAȚI | ×:
Iată configurația iptables-ului meu gazdă
# iptables -L -n -v
INTRARE în lanț (politica ACCEPTĂ 423K pachete, 53M octeți)
pkts bytes target prot opt in out source destination
Lanț FORWARD (politica DROP 0 pachete, 0 octeți)
pkts bytes target prot opt in out source destination
5142K 18G DOCKER-USER toate
5142K 18G DOCKER-ISOLATION-STAGE-1 toate
0 0 ACCEPT toate
0 0 DOCKER toate
0 0 ACCEPT toate
0 0 ACCEPT toate
3473K 5987M ACCEPT pe toate
3955 238K DOCKER toate
1665K 12G ACCEPT pe toate
3891 234K ACCEPT pe toate
0 0 LOG toate
IEȘIRE în lanț (politica ACCEPTĂ pachete de 153K, 97M octeți)
pkts bytes target prot opt in out source destination
Lanț DOCKER (2 referințe)
pkts bytes target prot opt in out source destination
12 824 ACCEPT tcp
19 1140 ACCEPT tcp
Lanț DOCKER-ISOLATION-STAGE-1 (1 referințe)
pkts bytes target prot opt in out source destination
0 0 DOCKER-ISOLATION-STAGE-2 toate
1665K 12G DOCKER-ISOLATION-STAGE-2 toate
5142K 18G RETURN all
Lanț DOCKER-ISOLATION-STAGE-2 (2 referințe)
pkts bytes target prot opt in out source destination
0 0 DROP all
0 0 DROP all
1665K 12G RETURN all
Lanț DOCKER-USER (1 referințe)
pkts bytes target prot opt in out source destination
5142K 18G RETURN all
# iptables -t nat -L -n -v
PRERUUTARE în lanț (politica ACCEPTĂ 67238 pachete, 8661K octeți)
pkts bytes target prot opt in out source destination
74 4480 DOCKER toate
INTRARE în lanț (politica ACCEPTĂ 66720 pachete, 8628K octeți)
pkts bytes target prot opt in out source destination
IEȘIRE în lanț (politica ACCEPTĂ 4761 pachete, 360K octeți)
pkts bytes target prot opt in out source destination
0 0 DOCKER toate
POSTROUTING în lanț (politica ACCEPTĂ 5305 pachete, 393K octeți)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE toate
2 352 MASQUERADE toate
0 0 MASQUERADE tcp
0 0 MASQUERADE tcp
Lanț DOCKER (2 referințe)
pkts bytes target prot opt in out source destination
0 0 RETURN all
0 0 RETURN all
12 824 DNAT tcp
19 1140 DNAT tcp