# Socks5 プロキシのデプロイ

ここでは、socks5 のインストール方法を2種類提供しています。問題を避けるため、関連する説明をよくお読みください。

## UDP プロトコルのプロキシが必要な場合

socks5 udp プロキシの特性上、問題や複雑さが増える可能性があります。UDP を使用する必要がある場合は、以下のルールに従う必要があります。第一に、ホストシステムの OS は 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
```

## 送信ネットワークインターフェースの指定

サーバーやコンピュータに複数のインターネット接続可能なインターフェースがある場合、例えば家庭用PCで有線LANとWi-Fiでそれぞれ2つのネットワークに接続している場合、PCには `wlan0` と `eth0` のような2つのネットワークインターフェースが存在する可能性があります。そして、プロキシが使用する送信ネットワークを指定したい場合があるでしょう。`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}
すべてのデプロイ作業が完了したら、「プロキシの設定」の章を参照して、デバイスのネットワークプロキシを設定する方法を確認してください。
```