Điểm:0

Chuyển tiếp cổng với iptables cho Nextcloud (fpm+nginx) thông qua Wireguard

lá cờ de

Tôi đang cố gắng truy cập phiên bản Nextcloud (fpm phía sau nginx) của mình thông qua VPN bảo vệ dây, cả hai đều chạy trong vùng chứa docker.

docker-compose.yml của tôi trông giống như:

phiên bản: "3.9"
dịch vụ:
  đám mây tiếp theo:
    hình ảnh: đám mây tiếp theo
    container_name: nextcloud
    khởi động lại: luôn luôn
    môi trường:
      POSTGRES_DB: đám mây tiếp theo
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: xxxxxxxxx
      POSTGRES_HOST: postgres
      NEXTCLOUD_DATA_DIR: /data
    khối lượng:
      - /mnt/data/nextcloud:/var/www/html
      - /mnt/dữ liệu/tệp:/dữ liệu
    phụ thuộc:
      - postgres
  web:
    hình ảnh: nginx: mới nhất
    container_name: web
    khởi động lại: luôn luôn
    khối lượng:
      - /mnt/data/nextcloud:/var/www/html:ro
      - /srv/nextcloud/nginx.conf:/etc/nginx/nginx.conf
    lộ ra:
      - "80"
    cổng: 
      - "80:80"
    phụ thuộc:
      - đám mây tiếp theo
  dây bảo vệ:
    hình ảnh: docker.myownregistry.xy/wireguard:latest
    container_name: dây bảo vệ
    khởi động lại: "trừ khi dừng"
    môi trường:
      - PUID=1000
      -PGID=1000
      - TZ=Châu Âu/Berlin
      - PORT_FORWARDS=web:80
    khối lượng: 
      - /srv/wireguard/wg0.conf:/config/wg0.conf
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    hệ thống:
      - net.ipv4.ip_forward=1
    phụ thuộc:
      - mạng

Các iptables trông giống như:

# docker exec -it wireguard iptables -t nat -L -n -v

Chuỗi PREROUTING (chính sách CHẤP NHẬN 0 gói, 0 byte)
 pkts byte đích prot chọn không tham gia đích nguồn         
    0 0 DNAT tcp -- wg0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 tới:DOCKER_WEB_IP

Chuỗi INPUT (chính sách CHẤP NHẬN 0 gói, 0 byte)
 pkts byte đích prot chọn không tham gia đích nguồn         

ĐẦU RA chuỗi (chính sách CHẤP NHẬN 0 gói, 0 byte)
 pkts byte đích prot chọn không tham gia đích nguồn         
    6 424 DOCKER_OUTPUT tất cả -- * * 0.0.0.0/0 127.0.0.11          

Chuỗi POSTROUTING (chính sách CHẤP NHẬN 2 gói, 160 byte)
 pkts byte đích prot chọn không tham gia đích nguồn         
    6 424 DOCKER_POSTROUTING tất cả -- * * 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 tới:DOCKER_WIREGUARD_IP

Chuỗi DOCKER_OUTPUT (1 tài liệu tham khảo)
 pkts byte đích prot chọn không tham gia đích nguồn         
    0 0 DNAT tcp -- * * 0.0.0.0/0 127.0.0.11 tcp dpt:53 tới:127.0.0.11:41071
    6 424 DNAT udp -- * * 0.0.0.0/0 127.0.0.11 udp dpt:53 tới:127.0.0.11:39020

Chuỗi DOCKER_POSTROUTING (1 tài liệu tham khảo)
 pkts byte đích prot chọn không tham gia đích nguồn         
    0 0 SNAT tcp -- * * 127.0.0.11 0.0.0.0/0 tcp spt:41071 tới::53
    0 0 SNAT udp -- * * 127.0.0.11 0.0.0.0/0 udp spt:39020 tới::53



# docker exec -it wireguard iptables -L -n -v

Chuỗi INPUT (chính sách CHẤP NHẬN 4 gói, 381 byte)
 pkts byte đích prot chọn không tham gia đích nguồn         

Chuỗi FORWARD (chính sách CHẤP NHẬN 0 gói, 0 byte)
 pkts byte đích prot chọn không tham gia đích nguồn         
    0 0 CHẤP NHẬN tcp -- wg0 eth0 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 flags:0x17/0x02 ctstate MỚI
    0 0 CHẤP NHẬN tất cả -- eth0 wg0 0.0.0.0/0 0.0.0.0/0 ctstate LIÊN QUAN, THÀNH LẬP
    0 0 CHẤP NHẬN tất cả -- wg0 eth0 0.0.0.0/0 0.0.0.0/0 ctstate LIÊN QUAN, THÀNH LẬP

ĐẦU RA chuỗi (chính sách CHẤP NHẬN 7 gói, 561 byte)
 pkts byte đích prot chọn không tham gia đích nguồn    

Trước hết, tôi có thể ping ngang hàng bảo vệ dây từ VPN và nhận phản hồi. Khi tôi gửi yêu cầu HTTP tới IP ngang hàng, yêu cầu sẽ xuất hiện trong nhật ký của nginx và ứng dụng khách http bị kẹt khi chờ phản hồi.

Kết xuất TCP cho thấy rằng yêu cầu HTTP GET thực sự được chuyển tiếp, nhưng phản hồi của máy chủ thì không (nó thử lại nhiều lần):

tcpdump: đầu ra dài dòng bị chặn, sử dụng -v hoặc -vv để giải mã giao thức đầy đủ
nghe trên wg0, RAW loại liên kết (IP thô), kích thước chụp 262144 byte
13:10:05.319590 IP WG_CLIENT_IP.39952 > WG_PEER_IP.80: Flags [S], seq 2013357617, win 64860, tùy chọn [mss 1380,sackOK,TS val 625358504 ecr 0,nop,wscale 7], độ dài 0
13:10:05.319809 IP WG_PEER_IP.80 > WG_CLIENT_IP.39952: Flags [S.], seq 2024405621, ack 2013357618, win 28960, tùy chọn [mss 1460,sackOK,TS val 4067727362 ecr 625358,504 7]opscale
13:10:05.337819 IP WG_CLIENT_IP.39952 > WG_PEER_IP.80: Flags [.], ack 1, win 507, tùy chọn [nop,nop,TS val 625358524 ecr 4067727362], độ dài 0
13:10:05.337939 IP WG_CLIENT_IP.39952 > WG_PEER_IP.80: Flags [P.], seq 1:75, ack 1, win 507, tùy chọn [nop,nop,TS val 625358525 ecr 4067727362], độ dài 74: HTTP: GET /HTTP/1.1
13:10:05.338016 IP WG_PEER_IP.80 > WG_CLIENT_IP.39952: Flags [.], ack 75, win 227, tùy chọn [nop,nop,TS val 4067727380 ecr 625358525], độ dài 0
13:10:05.601611 IP WG_PEER_IP.80 > WG_CLIENT_IP.39952: Flags [P.], seq 1:1413, ack 75, win 227, tùy chọn [nop,nop,TS val 4067727644 ecr 625358525], độ dài 1412: HTTP: HTTP /1.1 302 Tìm thấy
13:10:05.621031 IP WG_CLIENT_IP.39952 > WG_PEER_IP.80: Flags [.], ack 1, win 507, tùy chọn [nop,nop,TS val 625358808 ecr 4067727380,nop,nop,sack 1 {1369:1413}], chiều dài 0
13:10:05.655547 IP WG_PEER_IP.80 > WG_CLIENT_IP.39952: Flags [.], seq 1:1369, ack 75, win 227, tùy chọn [nop,nop,TS val 4067727697 ecr 625358808], độ dài 1368: HTTP: HTTP/ 1.1 302 Tìm thấy
13:10:05.885450 IP WG_PEER_IP.80 > WG_CLIENT_IP.39952: Flags [.], seq 1:1369, ack 75, win 227, tùy chọn [nop,nop,TS val 4067727928 ecr 625358808], độ dài 1368: HTTP: HTTP/ 1.1 302 Tìm thấy
13:10:06.335429 IP WG_PEER_IP.80 > WG_CLIENT_IP.39952: Flags [.], seq 1:1369, ack 75, win 227, tùy chọn [nop,nop,TS val 4067728378 ecr 625358808], độ dài 1368: HTTP: HTTP/ 1.1 302 Tìm thấy
13:10:07.245449 IP WG_PEER_IP.80 > WG_CLIENT_IP.39952: Flags [.], seq 1:1369, ack 75, win 227, tùy chọn [nop,nop,TS val 4067729288 ecr 625358808], độ dài 1368: HTTP: HTTP/ 1.1 302 Tìm thấy
13:10:09.086287 IP WG_PEER_IP.80 > WG_CLIENT_IP.39952: Flags [.], seq 1:1369, ack 75, win 227, tùy chọn [nop,nop,TS val 4067731129 ecr 625358808], độ dài 1368: HTTP: HTTP/ 1.1 302 Tìm thấy
13:10:12.685537 IP WG_PEER_IP.80 > WG_CLIENT_IP.39952: Flags [.], seq 1:1369, ack 75, win 227, tùy chọn [nop,nop,TS val 4067734731 ecr 625358808], độ dài 1368: HTTP: HTTP/ 1.1 302 Tìm thấy
13:10:20.365456 IP WG_PEER_IP.80 > WG_CLIENT_IP.39952: Flags [.], seq 1:1369, ack 75, win 227, tùy chọn [nop,nop,TS val 4067742416 ecr 625358808], độ dài 1368: HTTP: HTTP/ 1.1 302 Tìm thấy
13:10:35.086342 IP WG_PEER_IP.80 > WG_CLIENT_IP.39952: Flags [.], seq 1:1369, ack 75, win 227, tùy chọn [nop,nop,TS val 4067757152 ecr 625358808], độ dài 1368: HTTP: HTTP/ 1.1 302 Tìm thấy
...

Điều kỳ lạ là khi tôi chạy một máy chủ http echo đơn giản (ví dụ: ealen/echo-server sử dụng nodejs express) thay vào đó tôi có thể truy cập nó thông qua VPN mà không gặp bất kỳ sự phức tạp nào.

Nó cũng không hoạt động khi tôi đang sử dụng bộ chứa nextcloud với máy chủ apache đi kèm.

CHỈNH SỬA:

Đây là cấu hình máy chủ iptables của tôi

# iptables -L -n -v
Chuỗi INPUT (chính sách CHẤP NHẬN 423K gói, 53M byte)
 pkts byte đích prot chọn không tham gia đích nguồn         

Chuỗi FORWARD (chính sách DROP 0 gói, 0 byte)
 pkts byte đích prot chọn không tham gia đích nguồn         
5142K 18G DOCKER-USER all -- * * 0.0.0.0/0 0.0.0.0/0           
5142K 18G DOCKER-ISOLATION-STAGE-1 tất cả -- * * 0.0.0.0/0 0.0.0.0/0           
    0 0 CHẤP NHẬN tất cả -- * docker0 0.0.0.0/0 0.0.0.0/0 ctstate LIÊN QUAN, THÀNH LẬP
    0 0 DOCKER tất cả -- * docker0 0.0.0.0/0 0.0.0.0/0           
    0 0 CHẤP NHẬN tất cả -- docker0 !docker0 0.0.0.0/0 0.0.0.0/0           
    0 0 CHẤP NHẬN tất cả -- docker0 docker0 0.0.0.0/0 0.0.0.0/0           
3473K 5987M CHẤP NHẬN tất cả -- * br-50f634c9c605 0.0.0.0/0 0.0.0.0/0 ctstate LIÊN QUAN, THÀNH LẬP
 3955 238K DOCKER tất cả -- * br-50f634c9c605 0.0.0.0/0 0.0.0.0/0           
1665K 12G CHẤP NHẬN tất cả -- br-50f634c9c605 !br-50f634c9c605 0.0.0.0/0 0.0.0.0/0           
 3891 234K CHẤP NHẬN tất cả -- br-50f634c9c605 br-50f634c9c605 0.0.0.0/0 0.0.0.0/0           
    0 0 LOG tất cả -- * * 0.0.0.0/0 0.0.0.0/0 LOG cờ 0 cấp 4

ĐẦU RA chuỗi (chính sách CHẤP NHẬN 153K gói, 97M byte)
 pkts byte đích prot chọn không tham gia đích nguồn         

Chuỗi DOCKER (2 tài liệu tham khảo)
 pkts byte đích prot chọn không tham gia đích nguồn         
   12 824 CHẤP NHẬN tcp -- !br-50f634c9c605 br-50f634c9c605 0.0.0.0/0 172.18.0.3 tcp dpt:2049
   19 1140 CHẤP NHẬN tcp -- !br-50f634c9c605 br-50f634c9c605 0.0.0.0/0 172.18.0.5 tcp dpt:80

Chuỗi DOCKER-ISOLATION-STAGE-1 (1 tài liệu tham khảo)
 pkts byte đích prot chọn không tham gia đích nguồn         
    0 0 DOCKER-ISOLATION-STAGE-2 tất cả -- docker0 !docker0 0.0.0.0/0 0.0.0.0/0           
1665K 12G DOCKER-ISOLATION-STAGE-2 tất cả -- br-50f634c9c605 !br-50f634c9c605 0.0.0.0/0 0.0.0.0/0           
5142K 18G TRẢ LẠI tất cả -- * * 0.0.0.0/0 0.0.0.0/0           

Chuỗi DOCKER-ISOLATION-STAGE-2 (2 tài liệu tham khảo)
 pkts byte đích prot chọn không tham gia đích nguồn         
    0 0 THẢ tất cả -- * docker0 0.0.0.0/0 0.0.0.0/0           
    0 0 THẢ tất cả -- * br-50f634c9c605 0.0.0.0/0 0.0.0.0/0           
1665K 12G TRẢ LẠI tất cả -- * * 0.0.0.0/0 0.0.0.0/0           

Chuỗi DOCKER-USER (1 tài liệu tham khảo)
 pkts byte đích prot chọn không tham gia đích nguồn         
5142K 18G TRẢ LẠI tất cả -- * * 0.0.0.0/0 0.0.0.0/0           
# iptables -t nat -L -n -v
PREROUTING chuỗi (chính sách CHẤP NHẬN 67238 gói, 8661K byte)
 pkts byte đích prot chọn không tham gia đích nguồn         
   74 4480 DOCKER tất cả -- * * 0.0.0.0/0 0.0.0.0/0 ADDRTYPE khớp kiểu dst ĐỊA PHƯƠNG

Chuỗi INPUT (chính sách CHẤP NHẬN 66720 gói, 8628K byte)
 pkts byte đích prot chọn không tham gia đích nguồn         

ĐẦU RA chuỗi (chính sách CHẤP NHẬN 4761 gói, 360K byte)
 pkts byte đích prot chọn không tham gia đích nguồn         
    0 0 DOCKER tất cả -- * * 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE khớp kiểu dst LOCAL

Chuỗi POSTROUTING (chính sách CHẤP NHẬN 5305 gói, 393K byte)
 pkts byte đích prot chọn không tham gia đích nguồn         
    0 0 GIẢ MẠO tất cả -- * !docker0 172.17.0.0/16 0.0.0.0/0           
    2 352 MẶT MẠO tất cả -- * !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

Chuỗi DOCKER (2 tài liệu tham khảo)
 pkts byte đích prot chọn không tham gia đích nguồn         
    0 0 TRẢ LẠI tất cả -- docker0 * 0.0.0.0/0 0.0.0.0/0           
    0 0 TRẢ LẠI tất cả -- 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 tới:172.18.0.3:2049
   19 1140 DNAT tcp -- !br-50f634c9c605 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 đến:172.18.0.5:80
Kayson avatar
lá cờ es
Điều đáng ngờ là các quy tắc dnat và snat của bạn hoàn toàn không bị ảnh hưởng. Iptables trông như thế nào trên máy chủ?
hhornbacher avatar
lá cờ de
@Kayson Tôi đã thêm iptables của máy chủ của mình

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.