Puncte:0

Redirecționare porturi cu iptables pentru Nextcloud (fpm+nginx) prin Wireguard

drapel de

Î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 -- wg0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 la:DOCKER_WEB_IP

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 -- * * 0.0.0.0/0 127.0.0.11          

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.0.0/0 127.0.0.11          
    0 0 SNAT tcp -- * eth0 0.0.0.0/0 DOCKER_WEB_IP tcp dpt:80 la:DOCKER_WIREGUARD_IP

Lanț DOCKER_OUTPUT (1 referințe)
 pkts bytes target prot opt ​​in out source destination         
    0 0 DNAT tcp -- * * 0.0.0.0/0 127.0.0.11 tcp dpt:53 la:127.0.0.11:41071
    6 424 DNAT udp -- * * 0.0.0.0/0 127.0.0.11 udp dpt:53 to:127.0.0.11:39020

Lanț DOCKER_POSTROUTING (1 referințe)
 pkts bytes target prot opt ​​in out source destination         
    0 0 SNAT tcp -- * * 127.0.0.11 0.0.0.0/0 tcp spt:41071 la::53
    0 0 SNAT udp -- * * 127.0.0.11 0.0.0.0/0 udp spt:39020 la::53



# 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 -- wg0 eth0 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 flags:0x17/0x02 ctstate NOU
    0 0 ACCEPT toate -- eth0 wg0 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,STABLISHED
    0 0 ACCEPT toate -- wg0 eth0 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,STABLISHED

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 -- * * 0.0.0.0/0 0.0.0.0/0           
5142K 18G DOCKER-ISOLATION-STAGE-1 toate -- * * 0.0.0.0/0 0.0.0.0/0           
    0 0 ACCEPT toate -- * docker0 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,STABLISHED
    0 0 DOCKER toate -- * docker0 0.0.0.0/0 0.0.0.0/0           
    0 0 ACCEPT toate -- docker0 !docker0 0.0.0.0/0 0.0.0.0/0           
    0 0 ACCEPT toate -- docker0 docker0 0.0.0.0/0 0.0.0.0/0           
3473K 5987M ACCEPT pe toate -- * br-50f634c9c605 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,STABLISHED
 3955 238K DOCKER toate -- * br-50f634c9c605 0.0.0.0/0 0.0.0.0/0           
1665K 12G ACCEPT pe toate -- br-50f634c9c605 !br-50f634c9c605 0.0.0.0/0 0.0.0.0/0           
 3891 234K ACCEPT pe toate -- br-50f634c9c605 br-50f634c9c605 0.0.0.0/0 0.0.0.0/0           
    0 0 LOG toate -- * * 0.0.0.0/0 0.0.0.0/0 LOG steagurile 0 nivelul 4

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 -- !br-50f634c9c605 br-50f634c9c605 0.0.0.0/0 172.18.0.3 tcp dpt:2049
   19 1140 ACCEPT tcp -- !br-50f634c9c605 br-50f634c9c605 0.0.0.0/0 172.18.0.5 tcp dpt:80

Lanț DOCKER-ISOLATION-STAGE-1 (1 referințe)
 pkts bytes target prot opt ​​in out source destination         
    0 0 DOCKER-ISOLATION-STAGE-2 toate -- docker0 !docker0 0.0.0.0/0 0.0.0.0/0           
1665K 12G DOCKER-ISOLATION-STAGE-2 toate -- br-50f634c9c605 !br-50f634c9c605 0.0.0.0/0 0.0.0.0/0           
5142K 18G RETURN all -- * * 0.0.0.0/0 0.0.0.0/0           

Lanț DOCKER-ISOLATION-STAGE-2 (2 referințe)
 pkts bytes target prot opt ​​in out source destination         
    0 0 DROP all -- * docker0 0.0.0.0/0 0.0.0.0/0           
    0 0 DROP all -- * br-50f634c9c605 0.0.0.0/0 0.0.0.0/0           
1665K 12G RETURN all -- * * 0.0.0.0/0 0.0.0.0/0           

Lanț DOCKER-USER (1 referințe)
 pkts bytes target prot opt ​​in out source destination         
5142K 18G RETURN all -- * * 0.0.0.0/0 0.0.0.0/0           
# 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 -- * * 0.0.0.0/0 0.0.0.0/0 ADDRTYPE se potrivește cu dst-type LOCAL

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 -- * * 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE se potrivește cu dst-type LOCAL

POSTROUTING în lanț (politica ACCEPTĂ 5305 pachete, 393K octeți)
 pkts bytes target prot opt ​​in out source destination         
    0 0 MASQUERADE toate -- * !docker0 172.17.0.0/16 0.0.0.0/0           
    2 352 MASQUERADE toate -- * !br-50f634c9c605 172.18.0.0/16 0.0.0.0/0           
    0 0 MASQUERADE tcp -- * * 172.18.0.3 172.18.0.3 tcp dpt:2049
    0 0 MASQUERADE tcp -- * * 172.18.0.5 172.18.0.5 tcp dpt:80

Lanț DOCKER (2 referințe)
 pkts bytes target prot opt ​​in out source destination         
    0 0 RETURN all -- docker0 * 0.0.0.0/0 0.0.0.0/0           
    0 0 RETURN all -- br-50f634c9c605 * 0.0.0.0/0 0.0.0.0/0           
   12 824 DNAT tcp -- !br-50f634c9c605 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:2049 to:172.18.0.3:2049
   19 1140 DNAT tcp -- !br-50f634c9c605 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 to:172.18.0.5:80
Kayson avatar
drapel es
Este suspect că regulile tale dnat și snat nu au fost lovite deloc. Cum arată iptables pe gazdă?
hhornbacher avatar
drapel de
@Kayson Am adăugat iptables ale gazdei mele

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.