# การปรับใช้แบบกระจาย (Distributed Deployment)

บางครั้งคุณอาจพบสถานการณ์ที่โทรศัพท์มือถือของคุณอยู่ที่บ้าน แต่คุณอยู่นอกบ้าน จะใช้งานได้อย่างไร? คุณสามารถใช้ไคลเอนต์ Frp หรือ OpenVPN ที่มีอยู่ใน FIRERPA เพื่อทำการปรับใช้แบบกระจาย (distributed deployment) ทำให้สามารถเชื่อมต่อกับอุปกรณ์ที่ปรับใช้แบบกระจายได้จากทุกที่ ทั้งสองวิธีนี้ต้องการให้คุณมีเซิร์ฟเวอร์ที่มี Public IP และต้องกำหนดค่าซอฟต์แวร์ฝั่งเซิร์ฟเวอร์ให้ถูกต้องจึงจะใช้งานได้ เอกสารในส่วนถัดไปจะอธิบายวิธีการปรับใช้เซิร์ฟเวอร์ Frp และ OpenVPN

```{danger}
การดำเนินการในบทนี้อาจทำให้โทรศัพท์มือถือของคุณถูกเปิดเผยสู่เครือข่ายสาธารณะ (Public Network) ซึ่งเพิ่มความเสี่ยงด้านความปลอดภัย โปรดอ่านอย่างละเอียดถี่ถ้วน
```

ในบทนี้ เราจะไม่กล่าวถึงการดำเนินการพื้นฐาน เช่น การเปิด/ปิดพอร์ตไฟร์วอลล์ เราจะถือว่าคุณมีความเข้าใจและได้ตั้งค่าตามที่กำหนดเรียบร้อยแล้ว และเราจะถือว่าคุณมีความเข้าใจเกี่ยวกับ Frp และ OpenVPN อยู่แล้ว สำหรับวิธีการปรับใช้เซิร์ฟเวอร์ทั้งสองประเภทนี้ เราได้อธิบายรายละเอียดไว้ในบทความนี้และบทถัดไป หากคุณเลือกที่จะปรับใช้ด้วยตนเอง เราขอแนะนำอย่างยิ่งให้ใช้วิธีการสร้างเครือข่ายด้วย OpenVPN


## ผ่านแพลตฟอร์ม Hub ของ FIRERPA

คุณยังสามารถปรับใช้ [firerpa/hub](https://github.com/firerpa/hub) + [firerpa/hub-bridge](https://github.com/firerpa/hub-bridge) ด้วยตนเองเพื่อเปิดใช้งานการเข้าถึงแบบ P2P ระหว่างอุปกรณ์ สำหรับรายละเอียดการดำเนินการ โปรดอ้างอิงจากเอกสารของโปรเจกต์

## การส่งต่อ (Forward) ไปยังพอร์ตภายในผ่าน Frp

คุณต้องดาวน์โหลดโปรแกรมฝั่งเซิร์ฟเวอร์ของ [fatedier/frp](https://github.com/fatedier/frp) ก่อน และใช้คำสั่งที่เราให้ไว้ด้านล่างนี้เพื่อเริ่มต้นการทำงานอย่างเคร่งครัด คุณสามารถแก้ไขพอร์ตและ token ได้ตามความเหมาะสม โดยต้องใช้ frps เวอร์ชัน > v0.45.0

```{danger}
การส่งต่อไปยังเครือข่ายสาธารณะเป็นการกระทำที่อันตรายอย่างยิ่ง อย่าประมาทและอย่าคิดว่า IP และพอร์ตของคุณเป็นความลับ โปรดเปิดใช้งานการยืนยันตัวตนด้วยใบรับรอง (Certificate Verification) สำหรับบริการของคุณเสมอ!
```

```bash
frps --token lamda --bind_addr 0.0.0.0 --bind_port 6009 --proxy_bind_addr 127.0.0.1 --allow_ports 10000-15000
```

จากคำสั่งข้างต้น ให้เขียนการตั้งค่าใน `properties.local` ดังนี้

```ini
fwd.host=ที่อยู่ Public IP ของเซิร์ฟเวอร์ของคุณ
fwd.port=6009

fwd.rport=พอร์ตปลายทางที่จะส่งต่อ (ควรอยู่ในช่วงของ allow_ports)
fwd.token=lamda

fwd.protocol=tcp
fwd.enable=true
```

เพิ่มหรือเขียนการตั้งค่าข้างต้นลงในไฟล์ `properties.local` จากนั้นรีสตาร์ทบริการ FIRERPA


## การส่งต่อ (Forward) ไปยังพอร์ตสาธารณะผ่าน Frp

หากคุณต้องการเชื่อมต่อกับอุปกรณ์จากทุกที่ เพื่อความปลอดภัย เราไม่แนะนำให้ทำเช่นนี้ หากจำเป็นต้องใช้งานในลักษณะนี้จริงๆ ขอแนะนำให้ใช้ฟังก์ชันของ OpenVPN เพื่อวางอุปกรณ์และคอมพิวเตอร์ของคุณไว้ในเครือข่ายย่อย (subnet) เดียวกันแล้วจึงเข้าถึง

```{danger}
การส่งต่อไปยังเครือข่ายสาธารณะเป็นการกระทำที่อันตรายอย่างยิ่ง อย่าประมาทและอย่าคิดว่า IP และพอร์ตของคุณเป็นความลับ โปรดเปิดใช้งานการยืนยันตัวตนด้วยใบรับรอง (Certificate Verification) สำหรับบริการของคุณเสมอ!
```

หากคุณยังคงต้องการใช้วิธีการของ frp ดังกล่าวเพื่อเข้าถึงจากทุกที่ โปรดตรวจสอบให้แน่ใจว่าบริการ FIRERPA ได้เริ่มต้นทำงานโดยใช้ใบรับรองบริการ (Service Certificate) และเปลี่ยนคำสั่งเริ่มต้น frps จาก `--proxy_bind_addr 127.0.0.1` เป็น `--proxy_bind_addr 0.0.0.0` ซึ่งจะทำให้พอร์ต `12345` ในตัวอย่างข้างต้นถูกผูก (bind) กับ Public IP โดยตรง หากคุณไม่ได้เริ่มต้น FIRERPA โดยใช้ใบรับรองบริการ ทุกคนจะสามารถเข้าถึงได้ ซึ่งเป็นสิ่งที่อันตรายอย่างยิ่ง โปรดเตรียมใจว่าข้อมูลของคุณอาจถูกเข้าถึงและทำลายโดยผู้ไม่หวังดี

## การเชื่อมต่อกับอุปกรณ์ที่ใช้ Frp Forwarding

เนื่องจากเอกสารข้างต้นได้ผูกพอร์ตที่ส่งต่อไปยัง `127.0.0.1` ของเซิร์ฟเวอร์ ดังนั้นเนื้อหาต่อไปนี้จำเป็นต้องทดสอบบนเซิร์ฟเวอร์สาธารณะที่ติดตั้ง frps เอง เราจะสมมติว่า `fwd.rport` ของคุณคือพอร์ต `12345` ด้านล่างนี้คือตัวอย่างวิธีการเชื่อมต่อกับอุปกรณ์ผ่านไลบรารี Python

```python
from lamda.client import *
d = Device("127.0.0.1", port=12345)
```

คุณยังสามารถเปิดเบราว์เซอร์บนเซิร์ฟเวอร์และไปที่ `http?s://127.0.0.1:12345` เพื่อเข้าถึงเดสก์ท็อประยะไกล (Remote Desktop) ของอุปกรณ์ได้


## การใช้งานผ่านเครือข่าย OpenVPN

โปรดดูบทที่เกี่ยวข้องกับวิธีการปรับใช้เซิร์ฟเวอร์ OpenVPN เพื่อเรียนรู้วิธีการนำอุปกรณ์เข้าร่วมเครือข่าย OpenVPN

## การเชื่อมต่อกับอุปกรณ์ที่ใช้เครือข่าย OpenVPN

หลังจากที่อุปกรณ์เข้าร่วมเครือข่าย OpenVPN แล้ว การใช้งานจะเหมือนกับปกติทุกประการ คุณเพียงแค่ต้องนำคอมพิวเตอร์ส่วนตัวของคุณเข้าร่วมเครือข่าย OpenVPN เดียวกันนี้ ก็จะสามารถเข้าถึงอุปกรณ์ได้โดยตรงผ่านที่อยู่ IP ส่วนตัว (Private IP) ของ OpenVPN คุณสามารถดาวน์โหลดไคลเอนต์ `OpenVPN Connect` ได้จากเว็บไซต์ทางการของ OpenVPN ที่ [openvpn.net/client](https://openvpn.net/client/) เพื่อเชื่อมต่อเข้าสู่เครือข่ายเดียวกัน