# การกำหนดค่า properties.local

ไฟล์ `properties.local` เป็นไฟล์กำหนดค่าระบบสำหรับบริการ FIRERPA โดยปกติจะถูกจัดเก็บไว้ในอุปกรณ์ ซึ่งประกอบด้วยสตริงในรูปแบบ `key=value` โดยการแก้ไขไฟล์นี้ คุณสามารถทำให้ FIRERPA เชื่อมต่อกับ OpenVPN, พร็อกซี, การส่งต่อพอร์ต (port forwarding) หรือตั้งค่ารหัสผ่านเข้าสู่ระบบหรือใบรับรอง และการกำหนดค่าระบบอื่นๆ ได้โดยอัตโนมัติเมื่อเริ่มต้นระบบ เมื่อ FIRERPA เริ่มทำงาน จะค้นหาและโหลดไฟล์นี้จาก `/data/usr` คุณสามารถดูรายการการกำหนดค่าที่มีได้จากไฟล์ [properties.local.example](https://github.com/firerpa/lamda/blob/HEAD/properties.local.example) ในโปรเจกต์และเลือกใช้ตามความเหมาะสม แต่โปรดระวังอย่าคัดลอกไฟล์นี้โดยตรง ให้เลือกเฉพาะส่วนที่คุณต้องการเขียนลงไปเท่านั้น


```{attention}
ไดเรกทอรี /data/usr เป็นไดเรกทอรีข้อมูลผู้ใช้ของ FIRERPA ซึ่งจะยังไม่มีอยู่ก่อนการเปิดใช้งานครั้งแรก หากคุณต้องการตั้งค่าไฟล์ properties.local ล่วงหน้า คุณจำเป็นต้องสร้างไดเรกทอรีนี้ด้วยตนเอง
```

สำหรับวิธีการเขียนการกำหนดค่าเริ่มต้นใน `properties.local` จะมีคำอธิบายที่เกี่ยวข้องในแต่ละฟังก์ชัน และคุณยังสามารถอ้างอิงจาก `properties.local.example` ได้อีกด้วย

## รายการพารามิเตอร์การกำหนดค่า

### การกำหนดค่าพื้นฐานหลัก

กำหนดค่าสภาพแวดล้อมการทำงานพื้นฐานของบริการ LAMDA รวมถึงพอร์ตที่รอรับการเชื่อมต่อ, การยืนยันตัวตน, ข้อมูลรับรองการเข้าสู่ระบบ และนโยบายการเข้าถึงข้ามโดเมน (cross-origin)

| ชื่อพารามิเตอร์ | ค่าเริ่มต้น | ค่าตัวอย่าง | เพิ่มในเวอร์ชัน | ลบในเวอร์ชัน | คำอธิบาย |
| :--- | :--- | :--- | :--- | :--- | :--- |
| `port` | `65000` | `65000` | - | - | พอร์ตเริ่มต้นที่บริการ LAMDA รอรับการเชื่อมต่อ |
| `brandname` | `FIRERPA` | `LAMDA-DEV` | - | - | ชื่ออุปกรณ์ที่แสดงบนรีโมทเดสก์ท็อป (สูงสุด 10 ตัวอักษร) |
| `cert` | ไม่มี | `TEFNREEg...` | - | - | ใบรับรองที่เข้ารหัสแบบ Base64 สำหรับการเข้ารหัสและการรับรองความถูกต้อง TLS |
| `ssl-web-credential` | ไม่มี | `pwd123` | - | - | รหัสผ่านสำรองสำหรับการเข้าสู่ระบบรีโมทเดสก์ท็อป (6-32 ตัวอักษร) |
| `allow_origin` | ไม่มี | `https://a.com` | - | - | ตั้งค่า CORS cross-origin header เพื่ออนุญาตให้ฝัง WebUI ได้ |
| `logfile` | ไม่มี | `/data/log.txt` | - | - | เส้นทางสำหรับจัดเก็บไฟล์บันทึก (log file) (ต้องสร้างไดเรกทอรีไว้ล่วงหน้า) |

### การเพิ่มประสิทธิภาพและความเข้ากันได้ของระบบ

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

| ชื่อพารามิเตอร์ | ค่าเริ่มต้น | ค่าตัวอย่าง | เพิ่มในเวอร์ชัน | ลบในเวอร์ชัน | คำอธิบาย |
| :--- | :--- | :--- | :--- | :--- | :--- |
| `disable-client-api` | `false` | `true` | - | - | ปิดใช้งาน Python client API หากอุปกรณ์เกิดข้อขัดข้อง โปรดตั้งค่าเป็น `true` |
| `enhanced-stealth-mode` | `false` | `true` | 7.65 | - | โหมดซ่อนตัวขั้นสูง (Enhanced stealth mode) เพื่อป้องกันการตรวจจับคอมโพเนนต์ |
| `enhanced-automation` | `false` | `true` | - | - | เปิดใช้งานการสนับสนุนระบบอัตโนมัติขั้นสูงหรือไม่ |
| `touch.backend` | `native` | `system` | - | - | แบ็กเอนด์การสัมผัส: `system` (แก้ไขการเลื่อน) หรือ `native` (ค่าเริ่มต้น) |
| `intercept-intent` | `false` | `true` | 8.20 | - | เปิดใช้งานฟังก์ชันการดักจับ Intent (get_last_activities) หรือไม่ |

### บริการ OpenVPN

การกำหนดค่าไคลเอ็นต์ OpenVPN ในตัว ทำให้อุปกรณ์สามารถสื่อสารผ่านอุโมงค์ VPN รองรับการส่งต่อทราฟฟิกทั้งหมดและการยืนยันตัวตนผู้ใช้

| ชื่อพารามิเตอร์ | ค่าเริ่มต้น | ค่าตัวอย่าง | เพิ่มในเวอร์ชัน | ลบในเวอร์ชัน | คำอธิบาย |
| :--- | :--- | :--- | :--- | :--- | :--- |
| `openvpn.enable` | `false` | `true` | - | - | เปิดใช้งานบริการ OpenVPN ในตัวหรือไม่ |
| `openvpn.global` | `false` | `false` | - | - | เปิดใช้งานการส่งต่อทราฟฟิก VPN ทั่วโลกหรือไม่ |
| `openvpn.proto` | `udp` | `udp` | - | - | โปรโตคอลการสื่อสาร VPN |
| `openvpn.cipher` | `AES-256-GCM` | `AES-256-GCM` | - | - | อัลกอริทึมการเข้ารหัส |
| `openvpn.host` | ไม่มี | `123.123.123.123` | - | - | ที่อยู่เซิร์ฟเวอร์ OpenVPN |
| `openvpn.port` | ไม่มี | `1190` | - | - | พอร์ตเซิร์ฟเวอร์ OpenVPN |
| `openvpn.ca` | ไม่มี | `LS0t...` | - | - | ใบรับรอง CA ในรูปแบบ Base64 |
| `openvpn.cert` | ไม่มี | `LS0t...` | - | - | ใบรับรองไคลเอ็นต์ในรูปแบบ Base64 |
| `openvpn.key` | ไม่มี | `LS0t...` | - | - | คีย์ไคลเอ็นต์ในรูปแบบ Base64 |

### บริการพร็อกซีส่วนกลาง

กำหนดค่าให้ LAMDA เชื่อมต่อกับพร็อกซี HTTP หรือ SOCKS5 โดยอัตโนมัติเมื่อเริ่มต้นระบบ ทำให้ทราฟฟิกของอุปกรณ์สามารถส่งผ่านเซิร์ฟเวอร์กลางที่ระบุได้โดยอัตโนมัติเมื่อบริการเริ่มทำงาน

| ชื่อพารามิเตอร์ | ค่าเริ่มต้น | ค่าตัวอย่าง | เพิ่มในเวอร์ชัน | ลบในเวอร์ชัน | คำอธิบาย |
| :--- | :--- | :--- | :--- | :--- | :--- |
| `gproxy.enable` | `false` | `true` | - | - | เชื่อมต่อพร็อกซีโดยอัตโนมัติเมื่อเริ่มต้นระบบหรือไม่ |
| `gproxy.type` | ไม่มี | `http-connect` | - | - | ประเภทพร็อกซี: `http-connect` หรือ `socks5` |
| `gproxy.host` | ไม่มี | `172.1.1.1` | - | - | ที่อยู่เซิร์ฟเวอร์พร็อกซี |
| `gproxy.port` | ไม่มี | `8080` | - | - | พอร์ตเซิร์ฟเวอร์พร็อกซี |
| `gproxy.login` | ไม่มี | `admin` | - | - | ชื่อผู้ใช้สำหรับเข้าสู่ระบบพร็อกซี |
| `gproxy.password` | ไม่มี | `pwd123` | - | - | รหัสผ่านสำหรับเข้าสู่ระบบพร็อกซี |

### บริการส่งต่อพอร์ต FRP

ใช้ FRP เพื่อทะลุเครือข่ายภายใน (NAT traversal) และแมปพอร์ตบริการของอุปกรณ์ไปยังเซิร์ฟเวอร์สาธารณะ เพื่อแก้ปัญหาการเข้าถึงระยะไกลในสภาพแวดล้อมที่ไม่มี IP สาธารณะ

| ชื่อพารามิเตอร์ | ค่าเริ่มต้น | ค่าตัวอย่าง | เพิ่มในเวอร์ชัน | ลบในเวอร์ชัน | คำอธิบาย |
| :--- | :--- | :--- | :--- | :--- | :--- |
| `fwd.enable` | `false` | `true` | - | - | เปิดใช้งานบริการส่งต่อ FRP หรือไม่ |
| `fwd.host` | ไม่มี | `123.123.123.123` | - | - | ที่อยู่เซิร์ฟเวอร์ FRP |
| `fwd.port` | ไม่มี | `9911` | - | - | พอร์ตควบคุมของเซิร์ฟเวอร์ FRP |
| `fwd.protocol` | `tcp` | `tcp` | - | - | ประเภทโปรโตคอลการส่งต่อ |
| `fwd.token` | ไม่มี | `abc123` | - | - | โทเค็นการตรวจสอบสิทธิ์สำหรับเข้าสู่ระบบ FRP |
| `fwd.rport` | `0` | `10086` | - | - | พอร์ตส่งต่อระยะไกล (0 หมายถึงสุ่ม) |

### บริการสำหรับการพัฒนาและจัดการ

มีสวิตช์สำหรับเครื่องมือจัดการระบบที่ใช้บ่อย รวมถึงบริการ ADB, การเข้าถึง Shell ระยะไกลผ่าน SSH และการจัดการงานที่กำหนดเวลา (cron)

| ชื่อพารามิเตอร์ | ค่าเริ่มต้น | ค่าตัวอย่าง | เพิ่มในเวอร์ชัน | ลบในเวอร์ชัน | คำอธิบาย |
| :--- | :--- | :--- | :--- | :--- | :--- |
| `adb.enable` | `true` | `true` | - | - | เปิดใช้งานบริการ ADB ในตัวหรือไม่ |
| `adb.directory` | `/data/local/tmp` | `/data/local/tmp` | - | - | ไดเรกทอรีการทำงานของ ADB |
| `adb.privileged` | `false` | `true` | - | - | เปิดใช้งานสิทธิ์ Root หรือไม่ (มิฉะนั้นจะเป็นสิทธิ์ shell) |
| `sshd.enable` | `true` | `true` | - | - | เปิดใช้งานบริการ SSH หรือไม่ |
| `cron.enable` | `true` | `true` | - | - | เปิดใช้งานบริการงานที่กำหนดเวลา (cron) หรือไม่ |

### บริการพร็อกซีแบบบริดจ์

โหมดพร็อกซีเครือข่ายขั้นสูงที่อนุญาตให้บริดจ์ทราฟฟิกผ่านอินเทอร์เฟซเครือข่ายที่ระบุ (เช่น เครือข่ายข้อมูลมือถือ) ทำให้สามารถใช้อุปกรณ์นี้เป็นพร็อกซีเพื่อเข้าถึงอินเทอร์เน็ตได้ และรองรับการยืนยันตัวตนผู้ใช้

| ชื่อพารามิเตอร์ | ค่าเริ่มต้น | ค่าตัวอย่าง | เพิ่มในเวอร์ชัน | ลบในเวอร์ชัน | คำอธิบาย |
| :--- | :--- | :--- | :--- | :--- | :--- |
| `tunnel2.enable` | `false` | `true` | - | - | เปิดใช้งานบริการพร็อกซีแบบบริดจ์หรือไม่ |
| `tunnel2.login` | ไม่มี | `lamda` | - | - | ชื่อผู้ใช้สำหรับพร็อกซีแบบบริดจ์ |
| `tunnel2.password` | ไม่มี | `1234` | - | - | รหัสผ่านสำหรับพร็อกซีแบบบริดจ์ |
| `tunnel2.iface` | ไม่มี | `rmnet` | - | - | อินเทอร์เฟซเครือข่ายขาออก: `rmnet` (ข้อมูลมือถือ) หรือ `wlan` (WiFi) |

### บริการค้นหาแบบกระจาย

บริการค้นหาอุปกรณ์อัตโนมัติตามโปรโตคอล mDNS เมื่อเปิดใช้งาน จะสามารถค้นหาและระบุอุปกรณ์ LAMDA ในเครือข่ายท้องถิ่นได้อย่างรวดเร็วผ่านชื่อโดเมนหรือข้อมูลเมตา

| ชื่อพารามิเตอร์ | ค่าเริ่มต้น | ค่าตัวอย่าง | เพิ่มในเวอร์ชัน | ลบในเวอร์ชัน | คำอธิบาย |
| :--- | :--- | :--- | :--- | :--- | :--- |
| `mdns.enable` | `false` | `false` | - | - | เปิดใช้งานการค้นหาแบบกระจาย mDNS หรือไม่ |
| `mdns.meta` | `false` | `true` | - | - | กระจายข้อมูลเมตาของอุปกรณ์ (รุ่น, ID, ฯลฯ) หรือไม่ |
| `mdns.name` | ไม่มี | `LAMDA.local` | - | - | ชื่อที่ใช้กระจายในเครือข่ายท้องถิ่นที่กำหนดเอง |
| `mdns.service` | `lamda` | `lamda` | - | - | ชื่อบริการที่ใช้ในการกระจาย |