DD-WRT: การอนุญาตให้ส่งต่อพอร์ตสามารถนำไปใช้กับคำขอที่มีต้นกำเนิดจากภายใน LAN ได้อย่างไร


26

ด้วยเฟิร์มแวร์ดั้งเดิมของเราเตอร์ของฉันฉันได้กำหนดพอร์ตการส่งต่อจากพอร์ต 80 ไปยังเซิร์ฟเวอร์ใน LAN ซึ่งฉันใช้ร่วมกับบริการ DNS แบบไดนามิกภายนอก

ตอนนี้ฉันได้อัพเกรดเป็น DD-WRT แล้วอนิจจาการส่งต่อพอร์ตใช้งานได้เฉพาะกับคำขอไปยัง IP ภายนอกจากภายนอก LAN จากภายใน LAN ฉันสามารถเข้าถึงเซิร์ฟเวอร์โดยใช้ IP ภายในของมันเท่านั้น

ฉันจะรับ IP ภายนอก (และชื่อโดเมนที่เชื่อมต่อกับ IP ภายนอกแบบไดนามิก) เพื่อให้สามารถเข้าถึงได้อย่างถูกต้องจากภายใน LAN ได้อย่างไร

ฉันชอบที่จะหาวิธีการที่จะบรรลุมันด้วยคำจำกัดความ DD-WRT มาตรฐาน แต่การใช้เช่น iptables ไม่ได้เป็นคำถาม

คำตอบ:


25

ดูเหมือนว่ามันเป็นข้อบกพร่องในการสร้าง DD-WRT ที่ผ่านมา

ใช้ iptables:

iptables -t nat -I POSTROUTING -o br0 -s 192.168.1.0/24 -d 192.168.1.0/24 -j MASQUERADE

(เปลี่ยน subnet ของคุณตาม LAN เฉพาะของคุณ)

จากhttp://hax.at/text/41


นั่นไม่ชัดเจน! ได้ผลเหมือนมีเสน่ห์ :)
Jay

ฉันตั้งค่านี้เป็นคำสั่งเริ่มต้นและรีบูตเราเตอร์ แต่ไม่มีการเปลี่ยนแปลง - ยังไม่ทำงาน
Timwi

ทำงานให้ฉัน ขอบคุณมาก. ตอนนี้ฉันสามารถเข้าถึง ddns ที่ได้รับมอบหมาย IP จากเครือข่ายภายในของฉันบนเราเตอร์ DD-WRT
nusi

3
สิ่งนี้ใช้ได้สำหรับฉัน แต่ถ้าฉันบันทึกเป็นสคริปต์ไฟร์วอลล์และไม่ใช่สคริปต์เริ่มต้น
Jarett Millard

@Timwi - ตามที่ Jarett กล่าวไว้ฉันก็ต้องใส่มันในส่วนของ "Firewall" ไม่ใช่ส่วน "Startup"
dan_linder

4

ด้วยจิตวิญญาณของคำตอบของ UrEl: iptablesสคริปต์กำหนดค่าตัวเองที่สามารถคัดลอกโดยไม่ต้องทำการดัดแปลงเพิ่มเติมได้ที่ฟอรัม DD-WRT :

insmod ipt_mark 
insmod xt_mark 
iptables -t mangle -A PREROUTING -i ! `get_wanface` -d `nvram get wan_ipaddr` -j MARK --set-mark 0xd001 
iptables -t mangle -A PREROUTING -j CONNMARK --save-mark 
iptables -t nat -A POSTROUTING -m mark --mark 0xd001 -j MASQUERADE 

ตามที่ระบุไว้โดย Jarett สิ่งนี้จะต้องใช้เป็นสคริปต์ไฟร์วอลล์และไม่ใช่สคริปต์เริ่มต้น


วิธีนี้ใช้ได้ผลกับฉันดีกว่าของ UrEI เพราะรุ่นหลังทำให้โทรศัพท์ SIP ของฉันไม่สามารถเชื่อมต่อได้
jamix

อะไรคือความแตกต่างระหว่างกฎนี้กับกฎของ @ UrlEl (นอกเหนือจากการรับส่วนต่อประสาน wan และที่อยู่ IP แบบไดนามิก)
Piotr Dobrogost

1

ลองปิดการใช้งาน "Filter WAN NAT redirection" ในแท็บ Security-> Firewall จากคำอธิบายความช่วยเหลือ:

กรอง WAN NAT Redirection ป้องกันโฮสต์บน LAN ไม่ให้ใช้ที่อยู่ WAN ของเราเตอร์เพื่อติดต่อเซิร์ฟเวอร์บน LAN (ซึ่งได้รับการกำหนดค่าโดยใช้การเปลี่ยนเส้นทางพอร์ต)


มันถูกปิดใช้งานแล้ว (โดยค่าเริ่มต้น) ความคิดอื่น ๆ ?
UrEl

นั่นเป็นเรื่องแปลก - บน LAN ของฉันการตั้งค่านี้เป็นสิ่งที่สร้างความแตกต่าง คุณกำลังใช้งานบิลด์ใด บางทีคุณอาจจะตรวจสอบการส่งต่อพอร์ตของคุณ - อาจจะมีบางอย่างผิดปกติมีที่คุณพลาด (อาจ IP ที่มีการเปลี่ยนแปลงระหว่างการเข้าถึงภายในและภายนอกของคุณจึงหมด forwardings พอร์ต?)
โทเบียส Plutat

ฉันใช้ 16994 ในเวลาเฉลี่ยฉันพบสิ่งนี้: hax.at/text/41
UrEl

โอ้ฉันรักรถบั๊กกี้รุ่น DD-WRT ได้อย่างไร! (การสร้างการเชื่อมต่อจากลูกค้าที่ใช้เวลานาน ... จนกว่าฉันจะพบว่าชื่อโฮสต์ในสัญญาเช่าคงที่ควรมีเพียงตัวอักษรตัวอักษร Arrgh!)
Tobias Plutat

1

ดูเหมือนว่าปัญหาที่แท้จริงของคุณคือคุณต้องการสองมุมมองของระเบียน DNS A ไดนามิก dns ของคุณภายนอกชี้ไปที่ IP สาธารณะของเครือข่ายซึ่งส่งต่อพอร์ต 80 ไปยังโฮสต์ท้องถิ่น สิ่งที่คุณต้องทำคือเพิ่มรายการใน dnsmasq ด้วยเรคคอร์ด A ซึ่งระบุชื่อโดเมนแบบเต็มไปยังโลคัลโฮสต์ ip สำหรับโลคัลโฮสต์ของคุณ คุณสามารถทำได้โดยเพิ่มสิ่งต่อไปนี้ในหน้าบริการ / ตัวเลือกเพิ่มเติม dnsmasq:

 address=/www.mydomain.com./xx.xx.xx.xx

เพียงแค่แทนที่ xx ด้วย IP ท้องถิ่นและชื่อโดเมนด้วยชื่อโดเมนของคุณ อย่าลืมจุดต่อท้ายมิฉะนั้นมันจะต่อท้ายชื่อโดเมนท้องถิ่นของคุณ


นี่คือสิ่งที่ฉันทำและใช้งานได้! แต่มันเป็นไปได้ที่จะทำเช่นนี้สำหรับพอร์ตบางอย่าง? วิธีนี้จะใช้งานได้หากคุณส่งต่อพอร์ตไปยังคอมพิวเตอร์เครื่องเดียว หากคุณส่งต่อพอร์ตไปยังคอมพิวเตอร์หลาย ๆ เครื่องมันจะไม่ทำงาน ...
rinogo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.