Ubuntu inside nat access internet ip

เข้าเรื่องเลยดีกว่า หากใช้ Linux ต่อเน็ต แชร์เน็ต แล้วเราเปิดพอร์ต 80 ที่เครื่องเรา
แล้วใช้ DynDNS สมมติเป็น lordbsd.minenu
พอเราจะเทส เราเข้าด้วยชื่อไม่ได้อ่ะ มันเกิดอะไรขึ้น ดูตามภาพนี้เลย

ปัญหานี้ผมแก้ได้แล้ว จะบอกวิธีเลยละกัน

สมมติว่า IP คอมเราคือ 192.168.1.33 เปิดพอร์ต 80 แล้วจะให้ Linux รับพอร์ต 80 ด้วยเหมือนกัน

เปิดรับ TCP 80 (DNAT)

iptables -t nat -A PREROUTING -p tcp -i ppp0 --dport 80
-j DNAT --to 192.168.1.33:80

ถ้าแปลเป็นภาษาคนก็คือ ที่ ppp0 TCP Port 80 ในตาราง nat เชน PREROUTING (ก่อนจะอ่าน Route Table)
เธอจง DNAT ไปที่ 192.168.1.33 port 80

มันก็จะเปลี่ยน Destination Address ไปที่ 192.168.1.33 แล้วก็ไปอ่านตาราง Route table แล้วก็ยาวไปเลย ส่งไปส่งมา จบ

แก้ปัญหาให้เราเล่นเองได้ DNAT อีกเหมือนกัน

iptables -t nat -A PREROUTING -p tcp --dst 219.117.216.105
--dport 80 -j DNAT --to 192.168.1.33:80

แปลเป็นภาษาคนคือ ที่ตาราง nat เชน prerouting (ก่อนจะอ่าน route table) ถ้าปลายทางไปที่ real ip ของเรา ก็ให้แปลงปลายทาง ด้วยการ DNAT ไปที่ 192.168.1.33 (เครื่องเราเอง)

แต่ packet มันจะแปลกๆ เพราะ source/destination ยัง = 192.168.1.33 อยู่ ก็ต้องแปลง SNAT ด้วย ว่ามาจาก ip จริง

iptables -t nat -I POSTROUTING -s 192.168.1.0/24 -d 192.168.1.33
-p tcp --dport 80 -j SNAT --to-source 219.117.216.105

นี่คือตามความเข้าใจของผมน่ะ อาจจะไม่ถูกมั๊ง แต่นี้แหละ work

Leave a comment

Your comment

*
To prove you're a person (not a spam script), type the security word shown in the picture.
Anti-spam image

Spam Protection by WP-SpamFree