ルーターの設定を変えたりするために、どうしてもブラウザでルーター内のネットワークにアクセスしなければならないことがあります。
そのときに外部サーバーを経由してアクセスできるようにする方法です。
(実は何度も似たような話を書いていますが、自身のための備忘録として書いておきます)
あくまで「こうやればできるよ」なので、セキュリティに関しての説明は省きます。
前提条件
- serverに対してはSSHでアクセスでき、root権限があります。
- ubuntuにも内部ネットワークからアクセスでき、root権限があります。
- ubuntuには事前にポートフォファードの設定をしてあり、server経由でSSHアクセスが出来ます。
Proxyサーバーのインストール
Ubuntuにログインして、Squid3をインストールします。
とりあえず設定はデフォルトのままで。
(ubuntu) # apt-get install squid3
(ubuntu) # initctl restart squid3
squid3 start/running, process 1462
ubuntu(3128) -> server(1132)にポートフォファード
autosshコマンドを使って、ubuntuからserverにポートフォファードをします。
(参考: リモートSSHポートフォファード)
squid3のデフォルトポートは3128です。それをサーバーの1132ポートに割り当てています。
(ubuntu) # autossh admin@www.server.com -M 0 -C -N -f -R 1132:localhost:3128
これで server内で1132ポートにhttpアクセスをすれば、ubuntu内の3128ポート、つまりsquid3にアクセスができるはずです。
curlコマンドで確かめてみましょう。
(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ポートフォファードが内部からのアクセスしか受け付けないからです。
そこで外部向けポート(server:1232)にアクセスしたら、内部のproxyサーバーポート(server:1132)に転送されるようにします。
ポイントは -gオプション ですね。これによって、外部からのアクセスを内部に転送できます。
(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
結果
おー。できたできた。