# การตั้งค่าพร็อกซีของระบบ (การสลับ IP)

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

## การเชื่อมต่อพร็อกซี

อินเทอร์เฟซนี้มีพารามิเตอร์จำนวนมาก สมมติว่าพร็อกซีที่คุณได้รับจากผู้ให้บริการคือ `http://1.x.x.x:8080` เพียงใช้โค้ดไม่กี่บรรทัดด้านล่างนี้ ก็สามารถทำให้ทราฟฟิกของอุปกรณ์ผ่านพร็อกซีนี้ได้ คุณสามารถดูรายละเอียดพารามิเตอร์ทั้งหมดได้ที่ส่วน `พารามิเตอร์ทั้งหมด` ด้านล่างเพื่อทำความเข้าใจพารามิเตอร์ที่คุณสามารถใช้ได้

```python
profile = GproxyProfile()
profile.type = GproxyType.HTTP_CONNECT

profile.drop_udp = True
profile.host = "1.x.x.x"
profile.port = 8080

d.start_gproxy(profile)
```

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

## ประเภทของพร็อกซี

| ประเภทพร็อกซี | คำอธิบาย |
|---|---|
| GproxyType.HTTP_CONNECT | HTTP |
| GproxyType.HTTPS_CONNECT | HTTPS (HTTP+TLS) |
| GproxyType.SOCKS5 | Socks5 |
| GproxyType.SHADOWSOCKS | Shadowsocks |
| GproxyType.HTTP_RELAY | เลิกใช้งานแล้ว |


### พารามิเตอร์การเข้ารหัสของ Shadowsocks

รายการด้านล่างนี้คือประเภทการเข้ารหัสของ Shadowsocks ที่รองรับ รองรับเฉพาะวิธีการเข้ารหัสที่มีอยู่ในรายการเท่านั้น และไม่รองรับพารามิเตอร์การทำให้สับสน (obfuscation)

| ประเภทการเข้ารหัส | ชื่อ |
|---|---|
| AES | aes-128-cfb |
| AES | aes-192-cfb |
| AES | aes-256-cfb |
| AES | aes-128-ctr |
| AES | aes-192-ctr |
| AES | aes-256-ctr |
| CAMELLIA | camellia-128-cfb |
| CAMELLIA | camellia-192-cfb |
| CAMELLIA | camellia-256-cfb |
| DES | des-cfb |
| AES-AEAD | aes-128-gcm |
| AES-AEAD | aes-192-gcm |
| AES-AEAD | aes-256-gcm |
| AEAD | chacha20-ietf-poly1305 |

สำหรับ Shadowsocks โปรดใช้วิธีการต่อไปนี้เพื่อตั้งค่าวิธีการเข้ารหัสและรหัสผ่าน

```python
profile.login = "chacha20-ietf-poly1305"
profile.password = "รหัสผ่าน"
```

## การปิดพร็อกซี

คุณสามารถใช้คำสั่งต่อไปนี้เพื่อปิดพร็อกซีที่ FIRERPA ตั้งค่าไว้ในระบบ อินเทอร์เฟซนี้ใช้งานง่ายมาก และไม่ต้องการพารามิเตอร์เพิ่มเติมใดๆ

```python
d.stop_gproxy()
```


## พารามิเตอร์ทั้งหมด

ด้านล่างนี้คือข้อมูลการกำหนดค่าพารามิเตอร์ทั้งหมดสำหรับอินเทอร์เฟซพร็อกซี คุณสามารถเลือกใช้พารามิเตอร์ที่ต้องการได้ตามคำอธิบายของแต่ละพารามิเตอร์

คุณสามารถกำหนดค่าประเภทของบริการพร็อกซีผ่านพารามิเตอร์ต่อไปนี้ หากเป็นพร็อกซี socks5 ให้ใช้ `GproxyType.SOCKS5`

```python
profile.type = GproxyType.HTTP_CONNECT
```

หากคุณต้องการเปลี่ยนเส้นทาง (redirect) การสืบค้น DNS ไปยัง 114 พารามิเตอร์นี้จะทำให้การสืบค้น DNS ทั้งหมดที่ส่งจากระบบถูกส่งต่อไปยังที่นี่ ในกรณีที่ใช้งานร่วมกับ OpenVPN อย่าตั้งค่าเป็น DNS ภายในของ OpenVPN มิฉะนั้นอาจทำให้การเชื่อมต่ออินเทอร์เน็ตถูกตัดขาดโดยสิ้นเชิง เมื่อไม่ได้ใช้การกำหนดค่านี้ ระบบจะใช้ DNS เริ่มต้นของระบบ

```{attention}
หากตั้งค่าพารามิเตอร์ dns_proxy เพื่อพร็อกซีการสืบค้น DNS, DNS เซิร์ฟเวอร์ที่คุณใช้จะต้องรองรับการสืบค้นผ่าน TCP โดยปกติแล้ว DNS เซิร์ฟเวอร์ที่ใช้กันทั่วไปมักจะรองรับการสืบค้นผ่าน TCP
```

```python
profile.nameserver = "114.114.114.114"
```

การกำหนดค่า IP และหมายเลขพอร์ตของพร็อกซีเซิร์ฟเวอร์

```python
profile.host = ที่อยู่พร็อกซีเซิร์ฟเวอร์
profile.port = พอร์ตพร็อกซีเซิร์ฟเวอร์
```

หากพร็อกซีเซิร์ฟเวอร์ของคุณต้องการการยืนยันตัวตนเพื่อเข้าสู่ระบบ คุณสามารถระบุได้ผ่านพารามิเตอร์ต่อไปนี้ ซึ่งขึ้นอยู่กับผู้ให้บริการพร็อกซีของคุณ สำหรับประเภท Shadowsocks, login จะหมายถึงวิธีการเข้ารหัส

```python
profile.login = "ชื่อผู้ใช้สำหรับเข้าสู่ระบบพร็อกซีเซิร์ฟเวอร์"
profile.password = "รหัสผ่านสำหรับเข้าสู่ระบบพร็อกซีเซิร์ฟเวอร์"
```

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

```python
profile.drop_udp = False
```

ใช้เพื่อกำหนดค่าว่าจะข้ามเครือข่ายท้องถิ่น (bypass local network) หรือไม่ หากกำหนดค่าเป็น `True` ทราฟฟิกในเครือข่ายของเร้าเตอร์ เช่น 192.168.x, 10.x จะไม่ผ่านพร็อกซี ค่าเริ่มต้นคือ False โปรดทราบว่าหากเปิดใช้งาน udp_proxy ตัวเลือกนี้จะไม่มีผลกับทราฟฟิก UDP

```python
profile.bypass_local_subnet = True
```

ใช้เพื่อกำหนดค่าว่าจะพร็อกซีทราฟฟิก UDP หรือไม่ พร็อกซีของคุณต้องเป็นไปตามเงื่อนไขเบื้องต้นบางประการ พร็อกซีของคุณต้องเป็นประเภท `GproxyType.SOCKS5` หรือ `GproxyType.SHADOWSOCKS` เท่านั้น และพร็อกซีเซิร์ฟเวอร์ของคุณต้องเปิดใช้งานการรองรับพร็อกซี UDP คุณสามารถติดตั้งพร็อกซีเซิร์ฟเวอร์ที่รองรับ SOCKS5 UDP หรือสร้างเซิร์ฟเวอร์ ss ของคุณเองได้ตามเอกสารที่เราจัดเตรียมไว้ให้ ค่าเริ่มต้นคือ False และเมื่อคุณใช้พร็อกซี http หรือตั้งค่าตัวเลือก drop_udp เป็น True ตัวเลือกนี้จะถูกละเว้น

```python
profile.udp_proxy = False
```

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

```python
profile.dns_proxy = False
```

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

```python
# โปรดเลือกวิธีการเลือกแอปพลิเคชันเป้าหมายจากสามวิธีด้านล่างนี้เพียงหนึ่งวิธี
app = d.application("com.android.browser")
app = d.get_application_by_name("เบราว์เซอร์")
app = d.application("com.android.browser", user=999) # แอปพลิเคชันโคลน

profile.application.set(app)
```

## การใช้พร็อกซีอัตโนมัติ

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

```ini
gproxy.enable=true
gproxy.type=http-connect
gproxy.host=1.x.x.x
gproxy.port=8080
gproxy.password=
gproxy.login=
```

## การสร้างบริการพร็อกซี

FIRERPA มี docker สำหรับบริการพร็อกซี socks5 ที่พร้อมใช้งานและรองรับ UDP อยู่ในไดเรกทอรี tools คุณสามารถเรียนรู้วิธีการปรับใช้ (deploy) พร็อกซีเซิร์ฟเวอร์ของคุณเองได้ในบทที่เกี่ยวข้องกับการปรับใช้บริการพร็อกซีในเอกสารนี้