ฉันกำลังพยายามกำหนดเส้นทางการรับส่งข้อมูลทั้งหมดผ่านอุโมงค์ 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 ทั้งหมด -- ทุกที่ ทุกแห่ง /* ห่วงโซ่ผู้ใช้สำหรับการกำหนดเส้นทางล่วงหน้า */
แจ้งให้เราทราบหากมีข้อมูลอื่นใดที่ฉันควรรวมไว้ และขอขอบคุณล่วงหน้า!