VyOS で HTTP Proxy を構成する

# はじめに

VyOS は、Linux ベースのソフトウェアルーターで、単なるルーティング以外にも、豊富な機能を持っているので、自身やチームのラボを構築する際に、非常に便利です。
個人的には、vSphere のラボを構築する際にも、必須級のソフトウェアになっています。

↓こちらの記事で、簡単な紹介もしています。

https://qiita.com/iwaseyusuke/items/0ac51439f476a36fb3ff

今回は、この便利な VyOS の機能の中で、特に個人的に重宝している HTTP Proxy (Web Proxy, Webproxy) の機能について、ご紹介します。


# なぜ HTTP Proxy なの？

手順の紹介の前に、どんなケースで、HTTP Proxy が便利なのか、簡単にご紹介しておこうと思います。
「そんなの良いから」という方は、手順の章まで飛んでいただいて、問題ございません。

まず、個人のラボや、チームでラボを運用している場合、自分の PC 端末が繋がる NW と、ラボ環境の NW が全く同じセグメントにある or 管理可能なルータにぶら下がっている (かつ、自分が好きなように VLAN 切って、ルーティングを設定できる) という状況が、必ずしも揃っている訳ではないと思います。
むしろ、ラボ環境は、自身の PC 端末から、いくつかルータを経由した先、場合によっては VPN を経由した先にあって、しかも、直接アクセスできる IP アドレスには限りがあって、踏み台 (Jump Box) or ラボのルータ (RT) を経由しないとアクセスできないケースが多いと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245234/e1268470-c4d4-c4f4-db5e-dcb0afb6b281.png)

この場合、SSH を多段でアクセスできれば、CLI 操作はそこまで問題にはなりません。
しかし、GUI 操作の場合、大抵は、RDP や VNC などを利用すると思いますが、同時接続できる人数が制限されてしまったり、手元の端末の操作に比べると、そこまで操作性が良く無かったりします。

個人的には、これが耐えられなくて、「手元の端末のブラウザで、ラボ環境の vCenter が操作できたら良いのに...」と思ってしまいます。

そこで、HTTP Proxy をラボ環境の VyOS に構築することで、「あたかも VyOS 上からブラウザ操作している」かのように、ラボ環境で動作するウェブアプリ、例えば vCenter とかにアクセスできてしまうのです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245234/759b7b0f-0930-e3a1-dd5c-7255a4c65676.png)

これによって、例えば、スクロールのしづらさや、入力のもたつき、などなど、ちょっとしたイライラから解放されます。


# 手順

参考にしている VyOS 公式ドキュメントは、こちらです。

https://docs.vyos.io/en/latest/configuration/service/webproxy.html


## TL;DR;

例によって、VyOS の操作がわかる方には、実際の設定例を見ていただく方が早いかと思うので、まずは全体像を載せておきます。

```text: フォーマット
service {
    webproxy {
        default-port <port>
        listen-address <address> {
            disable-transparent
        }
        ssl-safe-ports <port>
    }
}
```

```text: 設定例
service {
    webproxy {
        default-port 3128
        listen-address 0.0.0.0 {
            disable-transparent
        }
        ssl-safe-ports 5480
    }
}
```

:::note warn
**注意**
上記の設定だけでは、セキュリティがガバガバです。アクセス制限をかける必要がある場合には、公式ドキュメントに記載の認証設定などをしっかり実施してください。
:::

## 設定解説

```sh
# フォーマット
set service webproxy default-port <port>

# 設定例
set service webproxy default-port 3128
```

HTTP Proxy が待ち受けるポート番号を指定します。デフォルトでは、3128番ポートが使われますが、変更したい場合に、指定してください。
後で、自分の PC 端末のブラウザに HTTP Proxy 設定を行う際に、指定するポート番号になります。

```sh
# フォーマット
set service webproxy listen-address <address> disable-transparent

# 設定例
set service webproxy listen-address 0.0.0.0 disable-transparent
```

HTTP Proxy が待ち受ける IP アドレスを指定し、かつ透過プロキシのモードを無効化します。
設定例では、`0.0.0.0` を指定しており、VyOS の持つアドレス全てで、待ち受けられるように、ズボラなことをしています。もし、特定の IP アドレスだけで、待ち受けたい場合には、指定してください。
また、透過プロキシのモードについてですが、もし、無効化しない場合、VyOS を通過してインターネット側に抜けていく HTTP (80番ポート) の通信は、全て HTTP Proxy に吸い込まれていくことになりますので、必要に応じて、切り替えてください。

```sh
# フォーマット
set service webproxy ssl-safe-ports <port>

# 設定例
set service webproxy ssl-safe-ports 5480
```

`ssl-safe-ports` は、オプションではあるのですが、vSphere でのラボ環境を構築するには、ちょっと重要なオプションです。というのも、デフォルトでは、HTTPS 通信のうち、443番ポートしか、アクセスが許可されず、それ以外のポート番号での通信は拒否されてしまいます。
よって、この設定を入れておかないと、vCenter の VAMI (5480番ポート) にアクセスしようとした際、「あれ？vSphere Client (443番ポート)にはアクセスできるんだけど、VAMI にはアクセスできないなぁ...なんで？」となってしまいます。
その他、よくある 8443 とか、5443 とかで、HTTPS のアプリを動かしている場合、このオプションは複数回 (複数行) 設定できますので、必要に応じて追加してください。


## ブラウザ側の設定 + Tips

後は、自分の PC 端末のブラウザに、`<VyOS の IP アドレス>:<設定したポート番号 (デフォルト: 3128番ポート)>` で、プロキシ設定すれば、利用できるはずです。
ただし、そのまま普段使っているブラウザにラボ環境へのプロキシを設定してしまうと、自分のブラウジング全てにプロキシ設定が有効になってしまいますので、ご注意ください。

手っ取り早いのは、普段使っているブラウザではなく、ラボ環境専用のブラウザを別に用意することだと思います。例えば、私の場合、Chrome を普段使っているので、ラボ環境専用のブラウザとして、Firefox を使っています。
しかし、それでも、複数のラボ環境 (VyOS) があると、プロキシの切替えが面倒なので、FoxyProxy とかの拡張機能を使って、複数のプロキシ設定を切り替えて使っています。

https://addons.mozilla.org/ja/firefox/addon/foxyproxy-standard/

もし、普段使っているブラウザでも、プロキシを切替えて使いたい場合には、Proxy SwitchyOmega とか辺りで、ルール化してみるのも良いかも知れません。

https://chrome.google.com/webstore/detail/proxy-switchyomega/padekgcemlokbadohgkifijomclgjgif

ご参考になれば。