Score:0

เหตุใดแพ็กเก็ต netcat จึงถูกกำหนดเส้นทางใหม่โดยกฎ iptables แต่ไม่ใช่คำขอ curl

ธง in

ฉันกำลังพยายามกำหนดเส้นทางการรับส่งข้อมูลทั้งหมดผ่านอุโมงค์ SSH/พร็อกซี SOCKS5 ฉันมีกฎตาราง IP บางข้อที่กำหนดค่าให้เปลี่ยนเส้นทาง (เกือบ) ทราฟฟิกทั้งหมดไปยังโปรแกรมที่ใช้ซ็อกเก็ต ซึ่งจะเจรจาและเปลี่ยนเส้นทางทราฟฟิกไปยังพร็อกซี SOCKS5 สิ่งที่ฉันพบคือทราฟฟิกของฉันบางส่วนไม่ได้รับการเปลี่ยนเส้นทางอย่างถูกต้อง และฉันสงสัยว่าเป็นของฉันเอง iptables กฎที่ไม่ทำงาน จะมีใครใจดีให้ฉันยืมดวงตาอีกคู่ไหม?

ตัวอย่างเช่น ฉันวิ่งได้ nc 8.8.8.8 80 2>&1 และฉันเห็นในโปรแกรมที่ใช้ซ็อกเก็ตของฉันว่ามีการเปลี่ยนเส้นทาง แต่เมื่อฉัน ขด google.comฉันได้รับข้อผิดพลาดในการแก้ปัญหา: curl: (6) ไม่สามารถแก้ไขโฮสต์: google.com. ไม่มีบันทึกในโปรแกรมที่ใช้ซ็อกเก็ตของฉันซึ่งแสดงว่ามีการพยายามเปลี่ยนเส้นทาง

ฉันมีโปรแกรมที่ใช้ซ็อกเก็ตฟังที่ 0.0.0.0:9900 และพร็อกซี SOCKS5 เริ่มต้นที่พอร์ต 9901 เป็นต้น ฉันกำลังเรียกใช้ทั้งหมดนี้ในคอนเทนเนอร์ Docker ในกรณีที่สำคัญ (แต่ฉันไม่คิดว่ามันควรจะสำคัญอะไรมาก...)

ฉันเริ่มต้นพร็อกซี SOCKS5 เช่น:

#!/usr/bin/env ทุบตี

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

นี่คือ iptables กฎที่ฉันใช้:

#!/usr/bin/env ทุบตี

# สร้างห่วงโซ่ใหม่ในตาราง NAT
iptables -t nat --custom-chain ใหม่

# สร้างกฎสำหรับการปล่อยให้แพ็กเก็ตปลายทาง localhost อยู่คนเดียว
iptables -t nat --append CUSTOM --destination 127.0.0.0/8 --jump RETURN

# สร้างกฎสำหรับการออกจากอุโมงค์เราจะสร้างคนเดียว
# 192.168.0.25 คือ IP แบบคงที่ของเครื่องที่ใช้งานเซิร์ฟเวอร์ SOCKS5
iptables -t nat -- ต่อท้าย CUSTOM -- ปลายทาง 192.168.0.25 -- โปรโตคอล tcp -- ปลายทางพอร์ต 22 -- กระโดดกลับ

# สร้างกฎสำหรับเปลี่ยนเส้นทางการรับส่งข้อมูล TCP อื่น ๆ ทั้งหมดผ่านอุโมงค์ SSH
iptables -t nat --append CUSTOM --protocol tcp --jump LOG --log-level info --log-prefix='[iptables] '
iptables -t nat --append CUSTOM --protocol tcp --jump REDIRECT --to-ports 9900

# เชื่อมโยงเชน OUTPUT และ PREROUTING ของตาราง NAT กับเชนที่ผู้ใช้กำหนดเอง
iptables -t nat -I เอาต์พุต 1 --jump กำหนดเอง
iptables -t nat -I PREROUTING 1 --jump CUSTOM

และนี่คือผลงานฉบับเต็มของ iptables -t แนท -L -v:

CHAIN ​​PREROUTING (นโยบายยอมรับ 165 แพ็คเก็ต, 21537 ไบต์)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง         
  165 21537 กำหนดเองทั้งหมด -- ทุกที่ ทุกแห่ง            
 5129 389K DOCKER ทั้งหมด -- ทุกที่ ทุก ADDRTYPE ตรงกับ dst-type LOCAL
 6987 1026K delegate_prerouting all -- ใดๆ ที่ไหนก็ได้            

Chain INPUT (นโยบายยอมรับ 114 แพ็คเก็ต, 8854 ไบต์)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง         

Chain OUTPUT (นโยบายยอมรับ 40 แพ็กเก็ต, 2369 ไบต์)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง         
   40 2369 กำหนดเองทั้งหมด -- ทุกที่ทุกเวลา            
    0 0 DOCKER ทั้งหมด -- อะไรก็ได้ !127.0.0.0/8 ADDRTYPE ตรงกับ dst-type LOCAL

Chain POSTROUTING (นโยบายยอมรับ 39 แพ็คเก็ต, 2301 ไบต์)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง         
   72 9027 MASQUERADE all -- any !docker0 172.17.0.0/16 ทุกที่            
 1614 99565 delegate_postrouting ทั้งหมด -- ทุกที่ ทุกแห่ง            

Chain DOCKER (ข้อมูลอ้างอิง 2 รายการ)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง         
    0 0 ส่งคืนทั้งหมด - นักเทียบท่า 0 ทุกที่ทุกที่            

โซ่ CUSTOM (2 ข้อมูลอ้างอิง)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง         
   39 2301 คืนทั้งหมด -- อะไรก็ได้ 127.0.0.0/8         
    0 0 RETURN tcp -- อะไรก็ได้ 192.168.0.25 tcp dpt:ssh
    0 0 LOG tcp -- คำนำหน้าข้อมูลระดับ LOG ใด ๆ ที่ไหนก็ได้ "[iptables] "
    0 0 REDIRECT tcp -- ทุกที่ ทุกแห่ง พอร์ต redir 9900

โซ่ MINIUPNPD (2 ข้อมูลอ้างอิง)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง         

Chain delegate_postrouting (การอ้างอิง 1 รายการ)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง         
 1614 99565 postrouting_rule ทั้งหมด -- ทุกที่ ทุกแห่ง /* ห่วงโซ่ผู้ใช้สำหรับ postrouting */
    0 0 zone_lan_postrouting ทั้งหมด -- br-lan ใดก็ได้ทุกที่            
    0 0 zone_wifi_postrouting ทั้งหมด -- br-wifi ใด ๆ ทุกที่            
   55 5757 zone_wan_postrouting ทั้งหมด -- eth0 ใดก็ได้ทุกที่            

Chain delegate_prerouting (การอ้างอิง 1 รายการ)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง         
 6987 1026K prerouting_rule ทั้งหมด -- ทุกที่ ทุกแห่ง /* ห่วงโซ่ผู้ใช้สำหรับการกำหนดเส้นทางล่วงหน้า */
 4545 342K zone_lan_prerouting all -- br-lan ได้ทุกที่            
    1 32 zone_wifi_prerouting ทั้งหมด -- br-wifi ได้ทุกที่            
 2441 684K zone_wan_prerouting all -- eth0 ทุกที่ ทุกแห่ง            

เชน postrouting_lan_rule (อ้างอิง 1 รายการ)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง         

เชน postrouting_rule (อ้างอิง 1 รายการ)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง         

เชน postrouting_wan_rule (อ้างอิง 1 รายการ)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง         

เชน postrouting_wifi_rule (อ้างอิง 1 รายการ)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง         

โซ่ prerouting_lan_rule (อ้างอิง 1 รายการ)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง         

ห่วงโซ่ prerouting_rule (1 การอ้างอิง)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง         

โซ่ prerouting_wan_rule (อ้างอิง 1 รายการ)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง         

โซ่ prerouting_wifi_rule (อ้างอิง 1 รายการ)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง         

Chain zone_lan_postrouting (อ้างอิง 1 รายการ)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง         
    0 0 postrouting_lan_rule ทั้งหมด -- ทุกที่ ทุกแห่ง /* user chain for postrouting */

Chain zone_lan_prerouting (อ้างอิง 1 รายการ)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง         
 4545 342K prerouting_lan_rule all -- ใดๆ ที่ไหนก็ได้ /* user chain for prerouting */

Chain zone_wan_postrouting (อ้างอิง 1 รายการ)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง         
   55 5757 postrouting_wan_rule all -- ทุกที่ ทุกแห่ง /* user chain for postrouting */
   55 5757 MASQUERADE ทั้งหมด -- ทุกที่ ทุกแห่ง            

Chain zone_wan_prerouting (อ้างอิง 1 รายการ)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง         
 2441 684K MINIUPNPD ทั้งหมด -- ทุกที่ ทุกแห่ง            
 2441 684K MINIUPNPD ทั้งหมด -- ทุกที่ ทุกแห่ง            
 2441 684K prerouting_wan_rule all -- ใดๆ ที่ไหนก็ได้ /* user chain for prerouting */

Chain zone_wifi_postrouting (อ้างอิง 1 รายการ)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง         
    0 0 postrouting_wifi_rule ทั้งหมด -- ทุกที่ ทุกแห่ง /* user chain for postrouting */

Chain zone_wifi_prerouting (อ้างอิง 1 รายการ)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง         
    1 32 prerouting_wifi_rule ทั้งหมด -- ทุกที่ ทุกแห่ง /* ห่วงโซ่ผู้ใช้สำหรับการกำหนดเส้นทางล่วงหน้า */

แจ้งให้เราทราบหากมีข้อมูลอื่นใดที่ฉันควรรวมไว้ และขอขอบคุณล่วงหน้า!

dave_thompson_085 avatar
jp flag
ปัญหาไม่ได้อยู่ที่ curl แต่ DNS ซึ่งใช้ UDP ไม่ใช่ TCP (ยกเว้นในกรณีพิเศษบางอย่างที่ไม่เกี่ยวข้องในที่นี้) และในขณะที่ iptables สามารถเปลี่ยนเส้นทาง UDP (ด้วยการเปลี่ยนแปลงที่เหมาะสม) คุณไม่สามารถส่งผ่านอุโมงค์ OpenSSH ได้ `curl http://142.250.65.206` จะถูกส่งต่อไปยังหนึ่งในระบบ (จำนวนมาก) ของ Google แม้ว่ามันจะให้ 301 ถึง www.google.com ซึ่งอยู่ที่ _different_ ที่อยู่ รวมถึง 142.250.251.32 -- ซึ่งจะให้ อีก 301 สำหรับคำขอโดยใช้ IPaddress อินเทอร์เน็ตส่วนใหญ่ขึ้นอยู่กับ DNS และการพยายามใช้ที่อยู่ 'ด้วยมือ' มักจะทำให้เกิดปัญหา บางทีคุณอาจต้องการ VPN
Score:0
ธง cn

ยินดีต้อนรับสู่ StackOverflow!

จากข้อผิดพลาดจากคำขอ curl ดูเหมือนว่าคำขอ DNS จะล้มเหลวก่อนที่จะพยายามเชื่อมต่อกับ google.com

ในระบบ POSIX ความละเอียด DNS จะถูกควบคุมโดยไฟล์ /etc/resolv.conf หากไฟล์นั้นไม่มีบรรทัดเนมเซิร์ฟเวอร์ ระบบของคุณจะไม่สามารถระบุโฮสต์ได้ การเพิ่มหนึ่งสามารถทำได้ง่ายๆ เพียงเพิ่มบรรทัดนี้:

เนมเซิร์ฟเวอร์ 8.8.8.8

บนระบบ Linux รุ่นใหม่ ความละเอียดอาจถูกควบคุมโดย systemd-resolved และคุณจะเห็นบรรทัดดังนี้:

เนมเซิร์ฟเวอร์ 127.0.0.53

ในกรณีนี้ การแก้ไขไฟล์ /etc/resolv.conf ไฟล์จะเป็นวิธีแก้ปัญหาชั่วคราวเท่านั้นเนื่องจาก systemd จะเขียนทับไฟล์เป็นระยะ ในกรณีนั้น คุณจะต้องแก้ไขการกำหนดค่า netplan ใน /etc/netplan/ หรือปิดใช้งาน systemd-resolved

อ้างอิง:

t-r0d avatar
in flag
ขอบคุณสำหรับการป้อนข้อมูล! ฉันยอมรับว่า DNS ล้มเหลว แต่คำแนะนำของคุณจะไม่ส่งผลให้ DNS เกิดขึ้นในฝั่งไคลเอ็นต์หรือไม่ ฉันต้องการให้การแก้ไข DNS เกิดขึ้นบนเครื่องระยะไกล (เซิร์ฟเวอร์ SSH)
dave_thompson_085 avatar
jp flag
ไม่; DNS ใช้ UDP ซึ่งคุณไม่สามารถส่งต่อผ่าน SSH

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา