Điểm:0

Tại sao các gói netcat được định tuyến lại theo quy tắc iptables, mà không phải là yêu cầu cuộn tròn?

lá cờ in

Tôi đang cố định tuyến tất cả lưu lượng truy cập của mình thông qua đường hầm SSH/proxy SOCKS5. Tôi có một số quy tắc bảng IP được định cấu hình để chuyển hướng (gần như) tất cả lưu lượng truy cập sang chương trình dựa trên ổ cắm, sau đó thương lượng và chuyển hướng lưu lượng truy cập đến proxy SOCKS5. Điều tôi nhận thấy là không phải tất cả lưu lượng truy cập của tôi đều được định tuyến lại đúng cách và tôi nghi ngờ đó là iptables các quy tắc không hoạt động. Có ai sẵn sàng cho tôi mượn một đôi mắt thứ hai không?

Ví dụ, tôi có thể chạy nc 8.8.8.8 80 2>&1 và tôi thấy trong chương trình dựa trên ổ cắm của mình rằng quá trình chuyển hướng đang diễn ra. Nhưng khi tôi cuộn tròn google.com, tôi gặp lỗi về độ phân giải: curl: (6) Không thể giải quyết máy chủ: google.com. Không có nhật ký nào trong chương trình dựa trên ổ cắm của tôi cho thấy rằng bất kỳ chuyển hướng nào đã được thực hiện.

Tôi có chương trình dựa trên ổ cắm đang nghe tại 0.0.0.0:9900 và proxy SOCKS5 được bắt đầu trên cổng 9901 chẳng hạn. Tôi đang chạy tất cả những thứ này trong bộ chứa Docker, trong trường hợp có vấn đề (nhưng tôi không nghĩ nó quan trọng lắm ...).

Tôi khởi tạo proxy SOCKS5 như sau:

#!/usr/bin/env bash

ssh -D 127.0.0.1:9901 -N [email protected]

Sau đây là iptables quy tắc tôi đang sử dụng:

#!/usr/bin/env bash

# Tạo chuỗi mới trong bảng NAT.
iptables -t nat --new-chain TÙY CHỈNH

# Tạo quy tắc để riêng các gói định mệnh localhost.
iptables -t nat --append TÙY CHỈNH --destination 127.0.0.0/8 --jump RETURN

# Tạo quy tắc rời khỏi đường hầm mà chúng tôi sẽ tạo một mình.
#192.168.0.25 là IP tĩnh của máy chạy máy chủ SOCKS5.
iptables -t nat --append TÙY CHỈNH --destination 192.168.0.25 --protocol tcp --destination-port 22 --jump RETURN

# Tạo quy tắc để chuyển hướng tất cả lưu lượng TCP khác thông qua đường hầm SSH.
iptables -t nat --append TÙY CHỈNH --protocol tcp --jump LOG --log-level info --log-prefix='[iptables] '
iptables -t nat --append TÙY CHỈNH --protocol tcp --jump REDIRECT --to-ports 9900

# Liên kết chuỗi OUTPUT và PREROUTING của bảng NAT với chuỗi tùy chỉnh do người dùng xác định của chúng tôi.
iptables -t nat -I OUTPUT 1 --jump TÙY CHỈNH
iptables -t nat -I PREROUTING 1 --jump TÙY CHỈNH

Và đây là đầu ra đầy đủ của iptables -t nat -L -v:

PREROUTING chuỗi (chính sách CHẤP NHẬN 165 gói, 21537 byte)
 pkts byte đích prot chọn không tham gia đích nguồn         
  165 21537 TÙY CHỈNH tất cả -- mọi nơi mọi nơi mọi nơi            
 5129 389K DOCKER tất cả -- bất kỳ ở bất kỳ đâu ở bất kỳ đâu ADDRTYPE khớp với loại dst ĐỊA PHƯƠNG
 6987 1026K delegate_prerouting tất cả -- bất kỳ ở bất kỳ đâu ở bất kỳ đâu            

Chuỗi INPUT (chính sách CHẤP NHẬN 114 gói, 8854 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 40 gói, 2369 byte)
 pkts byte đích prot chọn không tham gia đích nguồn         
   40 2369 TÙY CHỈNH tất cả -- bất kỳ bất kỳ nơi nào bất kỳ nơi nào            
    0 0 DOCKER tất cả -- bất kỳ ở bất kỳ đâu !127.0.0.0/8 ADDRTYPE khớp dst-type LOCAL

Chuỗi POSTROUTING (chính sách CHẤP NHẬN 39 gói, 2301 byte)
 pkts byte đích prot chọn không tham gia đích nguồn         
   72 9027 MASQUERADE tất cả -- mọi !docker0 172.17.0.0/16 mọi nơi            
 1614 99565 delegate_postrouting tất cả -- mọi nơi mọi nơi            

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 RETURN all -- docker0 mọi nơi mọi nơi            

Chuỗi TÙY CHỈNH (2 tài liệu tham khảo)
 pkts byte đích prot chọn không tham gia đích nguồn         
   39 2301 TRẢ LẠI tất cả -- bất kỳ ở bất kỳ đâu 127.0.0.0/8         
    0 0 RETURN tcp -- bất kỳ ở đâu 192.168.0.25 tcp dpt:ssh
    0 0 LOG tcp -- bất kỳ nơi nào bất kỳ nơi nào tiền tố thông tin mức LOG "[iptables]"
    0 0 REDIRECT tcp -- bất kỳ nơi nào bất kỳ nơi nào chuyển hướng cổng 9900

Chuỗi MINIUPNPD (2 tài liệu tham khảo)
 pkts byte đích prot chọn không tham gia đích nguồn         

Chuỗi delegate_postrouting (1 tài liệu tham khảo)
 pkts byte đích prot chọn không tham gia đích nguồn         
 1614 99565 postrouting_rule all -- mọi nơi mọi nơi /* chuỗi người dùng để định tuyến sau */
    0 0 zone_lan_postrouting tất cả -- mọi br-lan mọi nơi mọi nơi            
    0 0 zone_wifi_postrouting all -- mọi br-wifi mọi nơi mọi nơi            
   55 5757 zone_wan_postrouting tất cả -- mọi eth0 ở mọi nơi mọi nơi            

Chuỗi delegate_prerouting (1 tài liệu tham khảo)
 pkts byte đích prot chọn không tham gia đích nguồn         
 6987 1026K prerouting_rule all -- mọi nơi mọi nơi /* chuỗi người dùng để định tuyến trước */
 4545 342K zone_lan_prerouting tất cả -- br-lan mọi nơi mọi nơi            
    1 32 zone_wifi_prerouting all -- br-wifi mọi nơi mọi nơi            
 2441 684K zone_wan_prerouting tất cả -- eth0 mọi nơi mọi nơi            

Chuỗi postrouting_lan_rule (1 tài liệu tham khảo)
 pkts byte đích prot chọn không tham gia đích nguồn         

Chuỗi postrouting_rule (1 tài liệu tham khảo)
 pkts byte đích prot chọn không tham gia đích nguồn         

Chuỗi postrouting_wan_rule (1 tài liệu tham khảo)
 pkts byte đích prot chọn không tham gia đích nguồn         

Chuỗi postrouting_wifi_rule (1 tài liệu tham khảo)
 pkts byte đích prot chọn không tham gia đích nguồn         

Chuỗi prerouting_lan_rule (1 tài liệu tham khảo)
 pkts byte đích prot chọn không tham gia đích nguồn         

Chuỗi prerouting_rule (1 tài liệu tham khảo)
 pkts byte đích prot chọn không tham gia đích nguồn         

Chuỗi prerouting_wan_rule (1 tài liệu tham khảo)
 pkts byte đích prot chọn không tham gia đích nguồn         

Chuỗi prerouting_wifi_rule (1 tài liệu tham khảo)
 pkts byte đích prot chọn không tham gia đích nguồn         

Chuỗi zone_lan_postrouting (1 tài liệu tham khảo)
 pkts byte đích prot chọn không tham gia đích nguồn         
    0 0 postrouting_lan_rule all -- bất cứ nơi nào bất cứ nơi nào /* chuỗi người dùng để định tuyến sau */

Chuỗi zone_lan_prerouting (1 tài liệu tham khảo)
 pkts byte đích prot chọn không tham gia đích nguồn         
 4545 342K prerouting_lan_rule all -- mọi nơi mọi nơi /* chuỗi người dùng để định tuyến trước */

Chuỗi zone_wan_postrouting (1 tài liệu tham khảo)
 pkts byte đích prot chọn không tham gia đích nguồn         
   55 5757 postrouting_wan_rule all -- bất cứ nơi nào bất cứ nơi nào /* chuỗi người dùng để định tuyến sau */
   55 5757 MASQUERADE all -- bất kỳ bất kỳ nơi nào bất kỳ nơi nào            

Chuỗi zone_wan_prerouting (1 tài liệu tham khảo)
 pkts byte đích prot chọn không tham gia đích nguồn         
 2441 684K MINIUPNPD tất cả -- mọi nơi mọi nơi            
 2441 684K MINIUPNPD tất cả -- mọi nơi mọi nơi            
 2441 684K prerouting_wan_rule all -- bất kỳ bất kỳ nơi nào bất kỳ /* chuỗi người dùng để định tuyến trước */

Chuỗi zone_wifi_postrouting (1 tài liệu tham khảo)
 pkts byte đích prot chọn không tham gia đích nguồn         
    0 0 postrouting_wifi_rule all -- bất kỳ nơi nào bất kỳ nơi nào /* chuỗi người dùng để định tuyến sau */

Chuỗi zone_wifi_prerouting (1 tài liệu tham khảo)
 pkts byte đích prot chọn không tham gia đích nguồn         
    1 32 prerouting_wifi_rule all -- mọi nơi mọi nơi /* chuỗi người dùng để định tuyến trước */

Hãy cho tôi biết nếu có bất kỳ thông tin nào khác mà tôi nên đưa vào và cảm ơn trước!

dave_thompson_085 avatar
lá cờ jp
Vấn đề không phải là cuộn tròn, mà là DNS, sử dụng UDP chứ không phải TCP (ngoại trừ một số trường hợp đặc biệt không liên quan ở đây) và trong khi iptables có thể chuyển hướng UDP (với các thay đổi phù hợp), bạn không thể gửi nó qua đường hầm OpenSSH. `curl http://142.250.65.206` sẽ được chuyển tiếp tới một trong (nhiều) hệ thống của google, mặc dù nó sẽ chỉ cung cấp cho bạn 301 tới www.google.com. 301 khác cho yêu cầu sử dụng IPaddress. Hầu hết Internet phụ thuộc vào DNS và việc cố gắng sử dụng các địa chỉ 'bằng tay' hầu hết đều gây rắc rối. Có thể bạn muốn có VPN.
Điểm:0
lá cờ cn

Chào mừng bạn đến với StackOverflow!

Dựa trên lỗi từ yêu cầu cuộn tròn của bạn, có vẻ như yêu cầu DNS không thành công trước khi thử kết nối với google.com.

Trong các hệ thống POSIX, độ phân giải DNS được kiểm soát bởi tệp /etc/resolv.conf. Nếu tệp đó không chứa bất kỳ dòng máy chủ tên nào, hệ thống của bạn sẽ không thể phân giải máy chủ. Thêm một cái có thể đơn giản như thêm dòng này:

máy chủ định danh 8.8.8.8

Trên các hệ thống Linux mới hơn, độ phân giải có thể được kiểm soát bởi systemd-resolved và bạn sẽ thấy một dòng như sau:

máy chủ định danh 127.0.0.53

Trong trường hợp này, việc chỉnh sửa /etc/resolv.conf tệp sẽ chỉ là một giải pháp tạm thời, vì systemd sẽ ghi đè lên tệp theo định kỳ. Trong trường hợp đó, bạn sẽ cần chỉnh sửa cấu hình netplan trong /etc/netplan/ hoặc vô hiệu hóa giải quyết systemd.

Người giới thiệu:

t-r0d avatar
lá cờ in
Cảm ơn các đầu vào! Tôi đồng ý rằng DNS bị lỗi, nhưng đề xuất của bạn có dẫn đến DNS xảy ra phía máy khách không? Tôi muốn độ phân giải DNS xảy ra trên máy từ xa (máy chủ SSH).
dave_thompson_085 avatar
lá cờ jp
Không; DNS sử dụng UDP mà bạn không thể chuyển tiếp qua SSH.

Đă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.