# 部署 Socks5 代理

我們在此提供兩種 socks5 的安裝方法，為避免問題，請仔細閱讀相關說明。

## 需要代理 UDP 協定

由於 socks5 udp 代理的特性，這會讓問題和麻煩越來越多。如果您確定需要使用 UDP，則必須遵循以下規則：第一，您的主機系統必須為 Linux，且防火牆需要開放 UDP 連接埠 `50000-55000`。第二，您的伺服器網路絕不能是 NAT（FULL NAT 也不行，現有許多雲端伺服器都是 NAT 模式）。

```{tip}
為什麼主機必須是 Linux？因為在其他系統上，Docker 可能無法正常映射如此大範圍的連接埠；其次，在其他系統上，Docker 的網路模式無法設定為主機模式。
```

如果您不確定您的伺服器網路是否為 NAT，請透過 ifconfig 等指令獲取預設網路介面的 IP 位址，然後在您想使用代理的地方 ping 這個位址。如果 PING 不通，那麼您的伺服器可能位於 NAT 環境中。當然，即使有條件不符，也不代表就不能使用 UDP，您仍然可以自行架設 gost，文末將介紹如何架設。

```{attention}
由於 SOCKS5 UDP 代理的特性，如果您確定需要 UDP，請設定防火牆允許所有連接埠進行 UDP 通訊。
```

## 無需代理 UDP 協定

如果您不需要代理 UDP 協定，那麼一切都很簡單。執行以下指令即可啟動一個 SOCKS 服務。

```bash
docker run -it --rm -p 1080:1080 --name socks -e LOGIN=username -e PASSWORD=passwd rev1si0n/socks5
```

## 指定出口網卡

如果您的伺服器或電腦上有多個可上網的介面，以家用電腦為例，您可能透過網路線和 Wi-Fi 分別連接了兩個網路，那麼您的電腦可能就有兩個網路介面，如 wlan0 和 eth0。而您想指定代理要透過哪個網路出口。如果您想使用 eth0 作為出口，使用以下指令啟動 SOCKS 服務即可。

```{attention}
您的電腦或伺服器必須為 Linux 系統，其他系統不支援指定網路介面。
```

```bash
docker run -it --rm --net host --name socks -e LOGIN=username -e PASSWORD=passwd -e DEV=eth0 rev1si0n/socks5
```

如果您已滿足使用 UDP 的各項前置條件，使用以下指令即可

```bash
docker run -it --rm --net host --name socks -e LOGIN=username -e PASSWORD=passwd rev1si0n/socks5
```

## 使用 GOST 服務

如果您想使用 UDP 但無法滿足上述條件，或者用不到指定出口介面，或者不想安裝 Docker，您可以嘗試使用 gost。
從 [github.com/ginuerzh/gost/releases/](https://github.com/ginuerzh/gost/releases) 下載對應系統的可執行檔壓縮包。

```bash
gost -L=socks5://username:passwd@:1080
```

```{hint}
完成所有部署操作後，請參照設定代理的章節來了解如何設定裝置的網路代理。
```