NAT Gateway and SSL VPN with Pfsense-2.6.0

Network Diagram

ภาพที่ 1 Network Diagram

Requirement

  • Pfsense image บน project ของคุณ

  • 2 VPC network

    • 1 private subnet for assosiate with external IP สำหรับทำเป็น WAN interface

    • 1 private subnet ของลูกค้าที่ต้องการจะใช้ NAT gateway (มีได้มากกว่า 1 subnet) สำหรับทำเป็น LAN interface

  • 1 external IP สำหรับใช้ทำ NAT ออกไปยัง Internet และสำหรับ VPN client (OpenVPN)

Implementation guide

OS ในการทดสอบจะใช้ Pfsense-2.6.0 ทำ NAT gateway และ OpenVPN

***ในคู่มือนี้จะไม่มีขั้นตอนในการนำ image Pfsense เข้า NCS ผู้ใช้งานสามารถ import image Pfsense-2.6.0 ได้เอง ตามอ้างอิงในเอกสาร https://docs-epc.gitbook.io/ncs-documents/image/importing-your-own-imagearrow-up-right

1. Basic Configuration

2.1. Create Pfsense Instance

Launch instance ด้วย Pfsense-2.6.0 image

ภาพที่ 2 เลือก image Pfsense
ภาพที่ 3 เลือก flavor (spec) ที่สำหรับ Pfsense (หากต้องการใช้งาน performance ที่ดีแนะนำให้เลือกเป็น Dedicate flavor)
ภาพที่ 4 กำหนดขนาดของ Harddisk (HDD) ของ Pfsense

เลือก virtual network ที่จะผูก External IP เพื่อให้สามารถเข้าถึง WebUI ได้

ภาพที่ 5 เลือก virtual network ที่นำมาใช้งานเป็น WAN และเลือกให้มีการใช้ external IPs
ภาพที่ 6 สรุป spec ของ Pfsense ที่ต้องการสร้าง

2.2. Basic Config Pfsense

หลังจาก launch instance แล้ว เข้า WebUI ของ Pfsense ด้วย external IP โดยกรอกรายละเอียดล็อกอินต่อไปนี้

Username: admin

Password: pfsense

ภาพที่7 หน้า login ของ Pfsense

OS Note : หากเข้าไม่ได้แล้วมี error ขึ้นมา ให้ทำการ console แล้วใส่ command line นี้ “pfSsh.php playback disablereferercheck“

เมื่อเข้าได้แล้ว ให้ตั้งค่าพื้นฐาน เช่น hostname, dns, ntp, password

ภาพที่ 8 หน้า display แรกหลังจากที่ทำการ login สำเร็จ

จากนั้น เข้าไปที่เมนู Firewall ➝ Rule ➝ WAN

เพิ่ม rule allow any IP

โดยต้องทำก่อนการเพิ่ม network interface ที่ 2 เท่านั้น เนื่องจาก default rule ของ WAN ที่ allow HTTP จะถูกย้ายไปอยู่ขา LAN เมื่อเพิ่ม interface ใหม่ จะส่งผลให้ขา WAN ไม่มี rule firewall ที่ allow HTTP ซึ่งทำให้เราไม่สามารถเข้าใช้งาน Pfsense ได้

ภาพที่ 9 การกำหนด policy rule ของ WAN interface
ภาพที่ 10 การเพิ่ม policy rule

2.3. Add Network Interface ของ Pfsense สำหรับ LAN Interface

หลังจากตั้งค่าพื้นฐานของ Pfsense แล้ว ให้เพิ่ม network interface สำหรับ subnet (LAN) เพื่อใช้งาน NAT gateway โดยสามารถมีได้มากกว่า 1 subnet

ตัวอย่างคือ หากมี 2 subnet ที่ต้องการใช้งาน NAT gateway เราจำเป็นที่จะต้อง add interface ของ 2 subnet นี้เข้าที่ pfsense ด้วย

ภาพที่ 11 การเพิ่ม LAN interface (Port) ให้กับ Pfsense
ภาพที่ 12 การเพิ่ม LAN interface (Port) ให้กับ Pfsense

เมื่อเพิ่ม network interface ต้องแก้ security group ของ port นั้น ๆ ด้วย โดยต้องกำหนดให้เป็น allow all เพราะต้องกำหนด policy rule บน Pfsense อีกครั้ง

ภาพที่ 13 interface LAN ที่ถูกเพิ่มเติมเข้าไป

จากนั้น กลับมาที่ Pfsense ที่เมนู Interfaces ➝ Assignments

และ add interface เข้าไป

ภาพที่ 14 การ assignment interface (port) บน Pfsense
ภาพที่ 15 การกำหนด IP address ของ Interface LAN บน Pfsense

Allow Firewall ที่ขา LAN

ภาพที่ 16 การแสดง policy rule ทั้งหมดบน LAN interface

หลังจากเพิ่ม Interface LAN แล้ว ให้ทำ fix default route ของ Pfsense ให้ออกทางขา WAN เท่านั้น

ที่เมนู System ➝ Routing ➝ Gateways

ภาพที่ 17 การกำหนด route บน Pfsense

2. NAT Configuration

2.1. NAT Configuration

ตั้งค่า NAT โดยไปที่เมนู Firewall ➝ NAT ➝ Outbound

เปลี่ยน mode จาก automatic ไปยัง manual

จากนั้น ลบ rule NAT ออกให้หมด

ภาพที่ 18 การแสดง NAT บน Pfsense

เพิ่ม rule NAT สำหรับ private IP ที่จะ NAT ผ่าน Interface WAN ที่มี External IP อยู่

2.2. Add Host Route บน VPC Network

กลับไปที่หน้า NCS ของ project ของคุณเพื่อทำ host route บน virtual network เพื่อให้ instance ที่อยู่ภายใต้ virtual network นั้น ได้รับ DHCP default route ไปยัง Pfsense แทนที่จะเป็น vRouter

การทำ host route เป็นการบอกให้ DHCP server ของ Tungsten Fabric แจก route ที่ระบุลงไปเมื่อ Client รับ DHCP

  • ถ้า instance เกิดขึ้นมาก่อนจะใส่ host route จำเป็นต้อง release DHCP เพื่อให้ได้รับ route ดังกล่าว "dhclient -r"

  • ถ้า instance เกิดมาหลังใส่ Host Route จะได้รับ route ดังกล่าวทันที

รูปภาพ 20 การกำหนด host route ใน virtual network บน NCS portal

ทำการเพิ่ม Default Route ไปยังขาของ Pfsense

ภาพที่ 21 การกำหนด route default route (0.0.0.0/0) บน VPC Network ที่ต้องการใช้งาน NAT

2.3. Disable RPF บน Virtual Network

เมื่อทำ host route แล้ว จะต้อง disable "Reverse Path Forwarding" บน virtual network ที่ต้องการใช้ NAT gateway ด้วย โดยสามารถดำเนินการบน virtaul network ได้โดยเลือกที่ Network & Security > VPC Network > เลือก virtual network ที่ใช้งานสำหรับ WAN (external IPs) และ virtual network ต้องการใช้งาน NAT gateway ตามรูปด้านล่างครับ

ภาพที่ 22 การ disable RPF ของ VPC Network บน NCS portal

Launch instance ขึ้นมาเพื่อทดสอบ NAT gateway โดยใช้ private network

จะเห็นว่า default route จะชี้ไปทาง Pfsense แทน และเมื่อออก Internet จะเห็นว่าสามารถออกไปได้ด้วย external IP ที่ assosiate บน Pfsense ขา WAN อยู่

Note : หากมีเครื่อง instance ที่สร้างก่อนที่จะทำการกำหนด host route ใน VPC network จะไม่ได้รับ host route ซึ่งจะทำให้ไม่สามารถใช้งาน NAT gateway (internet) ได้ จึงจำเป็นต้อง reboot instance (VM) เครื่องดังกล่าวก่อน

ภาพที่ 23 การแสดงผล default route ที่จะออก Internet ผ่าน Pfsense

3. SSL VPN Configuration

3.1. Install Essential Package

ไปที่เมนู System ➝ Package Manager ➝ Available Packages

Search "openvpn" และลง package "openvpn-client-export" เพื่อใช้สำหรับ export file opvn สำหรับผู้ใช้งาน

ภาพที่ 24 package openvpn สำหรับการติดตั้งบน Pfsense
ภาพที่ 25 หลังจากที่มีการติดตั้งเสร็จ

3.2. Create new CA

ไปที่เมนู System ➝ Cert Manager ➝ CA

Method : Create an internal Certificate Authority

Key Type : RSA 4096

Digest Algorithm : SHA256

Lifetime : 3650 (10 years)

Note : การสร้าง SSL-VPN นี้ เป็นการใช้ certificate แบบ self signed แต่หากคุณมี CA แล้ว สามารถนำมาใช้ได้เช่นกัน

ภาพที่ 26 การเลือกใช้งาน certificate แบบ self signed
ภาพที่ 27 การกำหนดค่าต่างๆ ของ certificate แบบ self signed (1)

3.3. Create Server Certificates for OpenVPN

ไปที่เมนู System ➝ Cert Manager ➝ Certificates

Method : Create an internal Certificates

Key Type : RSA 4096

Digest Algorithm : SHA256

Lifetime : 3650 (10 years)

Certificate Type : Server Certificate

ภาพที่ 28 การกำหนดค่าต่างๆ ของ certificate แบบ self signed (2)
รูปที่ 29 การกำหนดค่าต่างๆ ของ certificate แบบ self signed (3)

3.4. Create OpenVPN Server

เข้าไปที่เมนู VPN ➝ OpenVPN ➝ Servers

ภาพที่ 30 การสร้าง OpenVPN server

ตั้งค่า OpenVPN Server ดังนี้

Server Mode : Remote Access (User Auth)

Device Mode : Tun - Layer 3 Tunnel Mode

Protocol : UDP on IPv4 Only

Interface : WAN

Peer Certificate Authority : NCS (ชื่อตามตอนที่สร้าง CA)

Server Certificate : NCS-Server (ชื่อตามตอนที่สร้าง Certificate Server)

ภาพที่ 31 การกำหนดค่า OpenVPN server (1)
ภาพที่ 32 การกำหนดค่า OpenVPN server (2)
ภาพที่ 33 การกำหนดค่า OpenVPN server (3)

IPv4 Tunnel Network : 10.147.0.0/24 (Subnet สำหรับแจก client เวลา VPN เข้ามา พยายามตั้งค่าให้ไม่ชนกับ subnet ที่ผู้ใช้ใช้งานอยู่)

IPv4 Local Network : 10.148.0.0/24, 10.149.0.0/24 (Subnet ที่ต้องการใช้งานเมื่อ VPN เข้ามา)

รูปที่ 34 การกำหนดค่า OpenVPN server (4)

เมื่อสร้าง OpenVPN server แล้ว ให้ assign interface ใหม่

รูปที่ 35 การกำหนด interface Tunnel สำหรับการทำ SSL VPN

และ allow firewall สำหรับ interface OpenVPN เพื่อให้ user สามารถใช้ VPN และเข้าถึง interface อื่นภายในได้

รูปที่ 36 การกำหนด policy rule สำหรับการ allow ให้มีการใช้งานบน Interface

3.5. Create Users for OpenVPN

เข้าไปที่เมนู System ➝ User Manager ➝ Users

ภาพที่ 37 การสร้าง User ชื่อ client1 สำหรับการใช้งาน SSL VPN

สำหรับ VPN user ไม่จำเป็นต้องอยู่ใน Group Membership แค่สร้าง username/password สามารถใช้งานได้เลย

ภาพที่ 38 การสร้าง client2 และต้องกำหนด password

3.6. Client Profile Export

ไปที่เมนู VPN ➝ OpenVPN ➝ Client Export

ทำการตั้งค่า Host Name Resolution เป็น other และใส่ Host Name เป็น External IP ที่ Assosiate กับขา WAN

ภาพที่ 39 การสร้าง profile SSL VPN ในการเข้าใช้งาน

Export OpenVPN Profile ไปใช้

ภาพที่ 40 ทำการ download (export) profile เพื่อนำไป import ใช้งานบน client (PC/NotebooK)

3.7. Testing OpenVPN

ทดสอบโหลด profile จาก Pfsense และใช้งานบน iPad

ภาพที่ 41 ทำการ import และทดสอบ connect SSL VPN ผ่าน OpenVPN client

สร้าง instance ใหม่ใน Private Network เพื่อทำเป็น web server ไว้ทดสอบ OpenVPN

ภาพที่ 42 ทำการทดสอบเชื่อมต่อ SSL VPN ไปยัง web server บน Nipa Cloud (NCS)

ทดสอบเข้า web ด้วย OpenVPN

รูปที่ 43 ทำการทดสอบเข้า Web Server ผ่าน SSL VPN

สิ่งที่ควรทราบและข้อจำกัด (Consideration and Limitation) :

  • Bandwidth ที่ใช้งาน Internet ได้ ขึ้นอยู่กับ Instance (Pfsense) ที่เราสร้างตาม Flavor ที่เลือก โดยรายละเอียดสามารถดูเพิ่มได้ที่ https://nipa.cloud/th/pricing/nipa-space/instancearrow-up-right

  • VPC Network ที่ใช้งาน NAT gateway จะไม่สามารถเชื่อมต่อกับ VPC Network อื่นๆ ที่เชื่อมต่อกับ logical router ได้ หากต้องการให้สามารถเชื่อมต่อกันได้ ต้องเพิ่ม destination route (host route) ของ VPC Network ของทั้ง 2 VPC network นั้น ซึ่งคล้ายการทำ static route

  • Configuration, Bug และ Issue ต่างๆ ที่เกิดจาก Pfsense ลูกค้าต้องดำเนินการตรวจสอบและแก้ไขด้วยตัวเอง

  • ผู้ใช้งานต้องดำเนินการตรวจสอบและแก้ไข configuration, bug และ issue ต่างๆ ที่เกิดจาก Pfsense

  • ผู้ใช้งานต้องดำเนินการด้าน security ต่างๆ ของ Pfsense (NAT gateway) ด้วยตนเอง

  • ไม่แนะนำให้ใช้งานกับ production หากต้องการใช้งานบน produciton กรุณาแจ้งติดต่อ sale เพื่อรับคำปรึกษาเพิ่มเติม

Last updated