ルーター内のProxyサーバーを経由してブラウザでアクセスする

ルーターの設定を変えたりするために、**どうしてもブラウザでルーター内のネットワークにアクセスしなければならない**ことがあります。
そのときに外部サーバーを経由してアクセスできるようにする方法です。
``(実は何度も似たような話を書いていますが、自身のための備忘録として書いておきます）``

あくまで「こうやればできるよ」なので、セキュリティに関しての説明は省きます。

## 前提条件

ネットワーク構成としてはこのような感じです。
![5ec4cf47-736e-b324-509d-e8198d5c9751.png](https://qiita-image-store.s3.amazonaws.com/0/39529/e83ac5f9-d1be-2111-294c-ab2add1a5a7a.png)

- serverに対してはSSHでアクセスでき、root権限があります。
- ubuntuにも内部ネットワークからアクセスでき、root権限があります。
- [ubuntuには事前にポートフォファードの設定](http://qiita.com/wf9a5m75/items/a78262532ac4823104f0)をしてあり、server経由でSSHアクセスが出来ます。

## Proxyサーバーのインストール

Ubuntuにログインして、Squid3をインストールします。
とりあえず設定はデフォルトのままで。

```shell-session
(ubuntu) # apt-get install squid3
(ubuntu) # initctl restart squid3 
squid3 start/running, process 1462
```

## ubuntu(3128) -> server(1132)にポートフォファード

autosshコマンドを使って、ubuntuからserverにポートフォファードをします。
(参考: [リモートSSHポートフォファード](http://qiita.com/wf9a5m75/items/575dec6d9e7e20591862#%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88ssh%E3%83%9D%E3%83%BC%E3%83%88%E3%83%95%E3%82%A9%E3%83%95%E3%82%A1%E3%83%BC%E3%83%89))

squid3のデフォルトポートは3128です。それをサーバーの1132ポートに割り当てています。

```shell-session
(ubuntu) # autossh admin@www.server.com -M 0 -C -N -f -R 1132:localhost:3128
```

これで server内で1132ポートにhttpアクセスをすれば、ubuntu内の3128ポート、つまりsquid3にアクセスができるはずです。
curlコマンドで確かめてみましょう。

```shell-session
(server) $ curl -x http://localhost:1132 -L http://192.168.80.1

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US"><!-- InstanceBegin template="/Templates/Master_No_Nav.dwt" codeOutsideHTMLIsLocked="false" -->
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <link rel="icon" type="image/png" href="/favicon.png" />
        <meta http-equiv="Cache-Control" CONTENT="no-cache">
        <meta http-equiv="Pragma" CONTENT="no-cache">
        <meta http-equiv="Expires" CONTENT="Mon, 1 Jan 2001 12:00:01 GMT">

		<!-- InstanceBeginEditable name="Page Title" -->
        <title>
            CradlePoint MBR1200 Gateway :
 
			Administration Login
		</title>
...
```

おお、とりあえずcurlコマンドで今回アクセスしたい192.168.80.1(ルーター)の管理画面のHTML文字列が返ってきました。
でもまだブラウザではアクセスできないです。

## server(1232) -> server(1132) に転送する

ブラウザでproxy設定を http://www.server.com:1132 にしてもアクセス出来ないのは、
[リモートSSHポートフォファードが内部からのアクセスしか受け付けないから](http://qiita.com/wf9a5m75/items/575dec6d9e7e20591862#%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E5%86%85%E3%81%A7%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%ABssh%E3%83%9D%E3%83%BC%E3%83%88%E3%83%95%E3%82%A9%E3%83%95%E3%82%A1%E3%83%BC%E3%83%89)です。

そこで外部向けポート(server:1232)にアクセスしたら、内部のproxyサーバーポート(server:1132)に転送されるようにします。
ポイントは **-gオプション** ですね。これによって、外部からのアクセスを内部に転送できます。

```shell-session
(local) $ ssh -A -f admin@www.server.com -t ssh -f -N -C -g -L 1232:localhost:1132 admin@localhost
```

**もちろんのことですけど、外部向けポート(server:1232)は外部からアクセスできるように開放しておかなければなりません**

## Proxy用のChrome Extension

Google Chromeを使っているなら、Proxy SwitchySharpが使いやすいです。
https://chrome.google.com/webstore/detail/proxy-switchysharp/dpplabbmogkhghncfbfdeeokoefdjegm

![Screen Shot 2016-01-28 at 1.41.43 PM.png](https://qiita-image-store.s3.amazonaws.com/0/39529/344a5504-7907-b722-2dd4-e4abf44be037.png)

## 結果

おー。できたできた。

![Screen Shot 2016-01-28 at 1.43.53 PM.png](https://qiita-image-store.s3.amazonaws.com/0/39529/a5bbc575-8a2f-5446-dc58-f34bf7b5101f.png)