บันทึกการทำ NAT/PAT จาก Domain มายัง Local Server

โจทย์ของครั้งนี้ก็คือ เมื่อเรามี web server ที่ใช้งานภายในองค์กร เคยใช้งานผ่าน IP Address หรือ ชื่อ hostname ที่ตั้งขึ้นใช้ภายในวง LAN หรือผ่าน VPN ก็ตาม แต่บางครั้งก็บาง Service ที่ต้องการใช้งานจากภายนอก เช่น แชร์ไฟล์ข้อมูล แจ้งข่าวสาร แลกเปลี่ยนข้อมูล เป็นต้น ซึ่งกระบวนการจะมีอยู่ 4 ส่วน

  1. Domain Name
  2. Public IP
  3. Firewall หรือ Internet Gateway ที่ทำ NAT ได้
  4. Web Server ในที่นี้ใช้ VestaCP ร่วมด้วย

โปรดระมัดระวัง

หากมีข้อมูลเดิมอยู่ควร Backup ก่อนดำเนินการใดๆ ที่อาจก่อให้เกิดการเปลี่ยนแปลงการตั้งค่า มันอาจจะไปเจอ BUG บางอย่างที่อาจทำให้ service ล่มได้

Domain Name

หลังจากที่จดชื่อ Domain Name แล้ว ให้เราระบุ A Record ให้ชี้ไปที่ Public IP Address ของเรา อาจจะเป็น Firewall หรือ Router ที่ทำ NAT ได้

  • Type กำหนดเป็น A
  • Host ให้ระบุทั้ง www และ non-www ตามด้วย ชื่อ domain
  • Answer หรือ Destination ให้ระบุ Public IP Address ปลายทางที่ต้องการชี้ไปหา
  • TTL เป็นระยะเวลาที่ใช้อัพเดท เบื้องต้นใส่ให้น้อยไว้ก่อนค่อยมาแก้ไขทีหลัง เป็น 14400

เมื่อชี้ไปแล้วให้ลอง ping ไปที่ domain ที่เราจะ และลอง nslookup ดูว่า IP ปลายทางชี้ไปยังอุปกรณ์ที่เราติดตั้งไว้แล้วหรือไม่ โดยใช้คำสั่ง ping ชื่อโดเมน และ nslookup ชื่อโดเมน

$ ping moremeng.in.th

Pinging moremeng.in.th [202.9.90.133] with 32 bytes of data:
Reply from 202.9.90.133: bytes=32 time=9ms TTL=53
Reply from 202.9.90.133: bytes=32 time=9ms TTL=53
Reply from 202.9.90.133: bytes=32 time=9ms TTL=53
Reply from 202.9.90.133: bytes=32 time=8ms TTL=53

Ping statistics for 202.9.90.133:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 8ms, Maximum = 9ms, Average = 8ms
$ nslookup moremeng.in.th

Non-authoritative answer:
Name:    moremeng.in.th
Address:  202.9.90.133

หากพบว่าเป็น IP Address ตามที่กำหนดไว้ถือว่าการตั้งค่าในส่วนนี้เสร็จสิ้น

Public IP (หมายเลขไอพีสาธารณะ)

คือ IP Address ที่สามารถเชื่อมต่อ และใช้งานอินเทอร์เน็ตได้ โดย Public IP แบ่งออกเป็น 2 แบบย่อย คือ

  • Static IP : เลข IP Address ที่ถูกกำหนด (Fix) มาจากผู้ให้บริการอินเทอร์เน็ต โดยเลข IP Address ประเภทนี้ใช้ในเครือข่ายคอมพิวเตอร์ของบริษัทหรือธุรกิจใด ๆ
  • Dynamic IP : เลข IP Address ที่เปลี่ยนแปลงตามการเชื่อมต่ออินเทอร์เน็ตในแต่ละครั้ง โดยเลข IP Address สำหรับผู้ใช้งานทั่วไปก็คือ Dynamic IP นั่นเอง

Ref: https://m.thaiware.com/tips/1819.html

ที่จะใช้ในส่วนนี้ควรเป็นแบบ Static IP เท่านั้น ไม่ควรใช้ Dynamic IP เพราะจะมีการหมุนเวียนเปลี่ยนไปทุกครั้งที่เชื่อมต่อ internet และในบาง ISP ก็จะมีการสลับทุก 24 ชั่วโมง ซึ่งทุกวันนี้ ISP จะมีการให้ Statis IP มาพร้อมวงจร FTTx อย่างน้อย 1 IP ราคาพันกว่าบาทต่อเดือน ก็สามารถใช้งานได้

Firewall หรือ Internet Gateway

พระเอกของรายการนี้อยู่ที่ตัวนี้เลย คืออุปกรณ์หรือซอร์ฟแวร์ที่สามารถทำ NAT/PAT ได้ ( หรือ router ที่ forward port ยังไม่เคยทดสอบว่าใช้งานได้หรือไม่ ) โดยอุปกรณ์ตัวนี้ต้องใช้ Static IP ตามที่เราได้กำหนดไว้ในข้างต้น เพื่อให้มัน forward ต่อไปยัง web server ภายใน

ซึ่งในการทำ NAT เราก็แค่ระบุ Source – Destination ไปยัง Private IP บนเครื่อง WebServer ภายในของเรา ในที่นี้จะใช้ Endian Firewall ในการดำเนินการ โดยไปที่เมนู Firewall > Port forwarding / NAT

  • Incoming IP เลือกแหล่งที่มา ในที่นี้ระบุเป็น Uplink main – Static IP ที่ใช้ผูก
  • Incoming Service Port ให้ระบุ port ของแหล่งที่มา ในที่นี้กำหนดเป็น HTTP 80
  • Translate to ให้เลือกเป็น IP
  • Insert IP ใส่เลข IP Address ของ web server เข้าไป ในที่นี้ใช้ 192.168.10.7
  • Port/Range ให้ระบุเป็น port ปลายทางของ webserver หากเราใช้ port อื่นที่ไม่ใช่ 80 ก็ระบุไว้ตรงส่วนนี้
  • จากนั้น Save

ในขั้นตอนนี้ เราก็สามารถใช้งานได้แล้ว โดยลองเรียกผ่านชื่อโดเมนที่จด ก็สามารถแสดงผลเว็บที่เราใช้งานผ่าน Port 80 ได้แล้ว

ขั้นตอนการทำ Domain -> NAT -> Web Server จะจบลงเท่านี้ หากเราไม่ได้ใช้งาน SSL หรือการใช้งานผ่าน protocal HTTPS ที่ port 443 แต่หากต้องการใช้งาน web server ผ่าน SSL ด้วยละก็ ให้ดำเนินการตามขั้นตอนต่อไป คือการตั้งค่า host เป็นชิื่อ domain เดียวกับที่เราจดเอาไว้ เพื่อให้สามารถสร้าง SSL Key ได้!!

Web Server – VestaCP

Vesta เป็น Hosting Control Panel ตัวหนึ่งที่ฟรี!! และใช้งานค่อนข้างแพร่หลาย ไม่แพ้ DirecAdmin, Pleak, cPanel เลย เหมาะสำหรับคนที่ชอบของฟรี ที่อยากติดตั้งอะไรด้วยตนเอง แต่ไม่เก่ง CLI หรือชอบใช้งาน Interface มากกว่า ซึ่งเจ้า Vesta นี้ก็มีเครื่องมือที่ครบครันในการบริการจัดการ Hosting เราได้สบาย ๆ เมื่อติดตั้งใช้งาน Vesta แล้ว ให้สร้าง Web ให้กำหนดชื่อ Domain ตามที่เราได้จดไว้

หากใช้งานอยู่แล้ว แต่ว่าไม่ได้ใช้ชื่อ domain เดียวกับที่จดจะค่อนข้างยากในการใช้งาน SSL เพราะเวลาที่ Let’s Encrypt มันทำงานมันจะวิ่งมาหา Default Domain ก่อน หากว่าไม่ใช่ชื่อ domain ที่ตรงกัน มันจะ error เราอาจจะต้องใช้วิธี run คำสั่งผ่าน shell เพื่อสร้าง SSL key แทน ซึ่งไม่แนะนำให้ทำแบบนี้ เพราะจะต้องทำบ่อย หากเดือนไหนลืมต่ออายุ SSL เราก็จะไม่สามารถใช้งานได้

ก่อนอื่นให้ไปเพิ่ม domain กับ NAT ในหน้า IP ก่อน โดยระบุ

  • Assigned domain เป็นชื่อโดเมนที่เราจดไว้ตอนต้น
  • NAT IP Address ให้ใส่ IP ของ Firewall หรือ Internet Gateway ที่ทำ NAT เอาไว้

ต่อไปให้สร้าง Domain เป็นชื่อเดียวกับที่จด โดยติดเลือก SSL Support และ Lets Encrypt Support จากนั้นกด Save รอลุ้นซักครู่ เป็นอันเสร็จพิธี

เมื่อเสร็จแล้วให้ลองทดสอบเข้าเว็บผ่าน https:// แทน http:// หากยังไม่สามารถใช้ได้ ให้ทดสอบว่า เข้าจากภายในด้วย https ได้หรือไม่ หากได้ แสดงว่า SSL ทำงานเป็นปกติแล้ว หากไม่ได้ ให้ไปเช็ค ในแถบ Web ว่า SSL Support เป็นเครื่องหมายถูกหรือยัง

สรุป

ขั้นตอนการทำไม่ยุ่งยาก หากทำโดยเริ่มต้นใหม่ และเซ็ตไปตามขั้นตอน แต่จะมีปัญหาเรื่องของการเข้าใช้งานบน local ให้เราเพิ่ม ALIAS เป็นชื่อ hostname เดิมที่เคยใช้งานอยู่ก็ได้ เช่นชื่อ hostname เดิมเป็น moremeng.home.local ก็อาจใส่เป็น moremeng ไปก็ได้ ซึ่งการเข้าจากภายในนั้น หากมี AD หรือ Domain Controller ภายในให้กำหนด hostname ให้ชี้ไปที่ IP ของ web server แทนก็จะสะดวกขึ้น