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
