学校のPCでフィルタリングを回避?!
今回は、学校の Windows PC において、フィルタリングを回避するための手段を解説していきます。
前提
- 対象ネットワークが、HTTP (80) / HTTPS (443) ポートはアクセス可能で、かつ、ブラックリスト方式
用意するもの
-
OpenVPN Connect v3 がインストール可能な Windows PC
あらかじめインストールまで済ませてください - root (sudo) が実行可能な Linux PC (Debain/Ubuntu) または VPS コンテナ
- ConoHa や Indigo 等の IPv4 のもの
詳細
今回は、SoftEther と SSH と OpenVPN を使って回避します。
サーバーを構築
Windows でも再現可能ですが、今回は、Linux で再現します。
Linuxサーバー
解説が面倒なので省略しますが、とりあえず Debian または Ubuntu の環境を用意します。
自宅サーバーが難しければ、VPS を契約しましょう。
価格を抑えたいのであれば、Indigo がおすすめです。
ファイアウォールを設定している場合は、80/tcp
, 443/tcp
, 1194/udp
のポートを許可してください。
以下、「サーバー」と述べ、Windows PC は「クライアント」と述べます。
既存パッケージの更新
まず、サーバー で次のコマンドを実行し、SoftEther のパッケージをインストールする準備をします。
sudo apt update
sudo apt full-upgrade -y
sudo apt install libsodium23 -y
パッケージは最新の方が好ましいです。
SoftEther のインストール
次のリンクから、SoftEther のパッケージをダウンロードします。
https://github.com/s1204IT/SoftEther-DE-Builder/releases
端末のアーキテクチャに合わせ、common, vpnserver をダウンロードします。
そして、次の順番でインストールします。
※バージョンとアーキテクチャは例です。
sudo dpkg -i softether-vpnserver_5.2.5187_amd64.deb
sudo dpkg -i softether-common_5.2.5187_amd64.deb
sudo systemctl start softether-vpnserver
sudo systemctl enable softether-vpnserver
SoftEther の設定
Windows で設定
操作はクライアント側に移ります。
次のサイトから、SoftEther のインストーラーをダウンロードします。
https://github.com/SoftEtherVPN/SoftEtherVPN/releases/latest
softether-vpnserver_vpnbridge-5.**.****.x64.exe
をダウンロードします。
インストーラーを立ち上げ、「SoftEther VPN サーバー管理マネージャー(管理ツールのみ)」を選択して続行し、完了後、起動します。
SoftEther 鯖のセットアップ
サーバー管理マネージャ が起動したら、
新しい接続設定(N)
⇒接続設定名(N)
を任意の名前に
⇒ホスト名(H)
を、サーバーの グローバルIPアドレス または ドメイン を入力
⇒OK
を押す
⇒接続(C)
を押す
⇒任意の 管理者パスワードを入力し、OK
を押す
⇒簡易セットアップが開くことを確認する
⇒リモートアクセス VPN サーバー(R)
にチェックを入れ次へ(N)
を押す
⇒内容初期化の警告が出たらはい(Y)
を押す
⇒仮想 HUB 名(N)
は、SE Client からのアタック防止のため、VPN
以外にする事を推奨。
別に VPN
のままでも構わない。
⇒ダイナミック DNS 機能 が表示されたら、ホスト名を変えずに閉じる(X)
⇒IPsec/L2TP 等は、任意でどうぞ。
⇒VPN Azure は無効で続行
⇒1. VPN 接続を受け入れるためのユーザーの作成
で、ユーザーを作成する(U)
から、ユーザー名(U)
とパスワード(P)
パスワードの確認入力(C)
を入力してOK
⇒ユーザーリストが表示されたら閉じる(X)
⇒セットアップを閉じる
⇒サーバー情報の参照および設定(N)
のConfig 設定(K)
を開く
⇒ファイルに保存(S)
を押し、適当に保存後、メモ帳等で開く
⇒DDnsClient
と検索し、その中の bool Disabled false
の false
を true
に変更し保存
⇒Config ファイルの編集
の画面に戻り、ファイルからインポートして書き込み(I)
を押し、編集したファイルを選択し、はい(Y)
を押す
⇒マネージャーが閉じるので再度開き、接続(C)
を押し、サーバー管理マネージャ の画面に戻る
⇒仮想 HUB の管理(A)
を押し、その他の管理(O)
の中の仮想 NAT および仮想 DHCP サーバー機能(V)
を開く
⇒SecureNAT 機能を有効にする(E)
を押し、OK
を押す
⇒仮想 HUB 管理を閉じ、サーバー情報の参照および設定(N)
内の暗号化と通信関係の設定(W)
を開く
⇒〔任意〕サーバー証明書(E)
内の新規作成(N)
を押し、Common Name を好きな文字列に変え、再作成する
⇒サーバー証明書(E)
内のエクスポート(X)
を押し、X509証明書が選択されている状態でOK
を押し、任意のディレクトリに適当な名前を付けて保存する
⇒暗号化と通信関係の設定を閉じ、OpenVPN / MS-SSTP 設定
を開く
⇒OpenVPN クライアント用のサンプル設定ファイルを生成(C)
を押し、鍵と同じディレクトリに保存する
⇒ZIP を開くか問われたら、いいえ(N)
を押し、そのままマネージャー全体を閉じる
⇒エクスポートしたOpenVPN_Sample_Config_[ホスト名]_[日時].zip
の中の、[ホスト名]_openvpn_site_to_site_bridge_l2.ovpn
を抽出し、メモ帳等で開く
⇒サーバー証明書の .key
のファイルもメモ帳等で開く
⇒〔任意〕.ovpn
ファイルのほうがものすごく見ずらい場合は、#
または ;
から始まっている行と空白行のすべてを削除する
ただし、<cert>
</cert>
と<key>
</key>
は削除してはならない。
⇒dev tap
を dev tun
に書き換え
⇒<ca>
の部分の、-----BEGIN CERTIFICATE-----
から、-----END CERTIFICATE-----
をコピーし、<cert>
から</cert>
の間に貼り付ける
この時、この間の;
はすべて除去する
⇒開いてある.key
のファイルの中身をすべてコピーし、<key>
の中身に貼り付ける
同様に、この間の;
はすべて除去する
プロファイルのサンプル(修正後)
push-peer-info
data-ciphers AES-128-CBC
dev tun
proto udp
remote 10.0.0.3 1194
cipher AES-128-CBC
auth SHA1
resolv-retry infinite
nobind
persist-key
persist-tun
client
verb 3
auth-user-pass
<ca>
-----BEGIN CERTIFICATE-----
MIIDJjCCAg6gAwIBAgIBADANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdUUDQ3
MEVBMB4XDTI1MDIxODEzMzY0MloXDTI2MTIxOTEzMzY0MlowEjEQMA4GA1UEAwwH
VFA0NzBFQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKR7Cu5FphfJ
9I22j7SmZDIUgsu2zFZpIkXJ0k6YN9cnT+B1bziyu0dVOlfxf68xTKWWpSiYGl7T
iJrQ45YCWEzjITqC8JV1pbjbEVREYO6vkVPSyw3nEsIAbjSXwgkmuOJ+txDl4ZSG
x6jC4kSVl7689uiyKqWnn8P+pgBFEF2AzsTTBAZT4tEOPoKE+TcQWPaMip28L6/k
Feg+D+zU82z91GlHFBJmGQRFDyKYQclqJe0t9zDJsS3sEHsTN6WKmlMQa6FuCH8K
e21hJHuXayfJo5ZLVFej+qwU5icLmuqiKCi3/O1+qw6f4SdCE9wKOGBs9RE85+kq
QGFqC0qilBUCAwEAAaOBhjCBgzAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB
9jBjBgNVHSUEXDBaBggrBgEFBQcDAQYIKwYBBQUHAwIGCCsGAQUFBwMDBggrBgEF
BQcDBAYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEFBQcDBwYIKwYBBQUHAwgGCCsG
AQUFBwMJMA0GCSqGSIb3DQEBCwUAA4IBAQAKBIDJ8oa2VRL7gV5PUtceOHqtcb+u
gCAXqw7nqO5GsSm9j4k3XxO4/IBUd//H6c+kzapbaLC3skckinJQ0JXKTkBWtsOF
miqdkNF/izqNEMSWpeK11AI8+Ma8Wt+TnnlbmCOu1f7LGQh1aJEKrzQF98L+USI5
L4ihWUjjbvMwsjshKrDVoHbaD7hsSgX8NPJw6U5gxuCvvs4avw8RMbEWYw403I61
JOQa5GrwgPbYMlkTDPnWzz5Hsz4AaRkOznRrtb8B4siYxP9PXqBbqV23DI7bh2bH
wNjpwDkWN+cy6Z7209QrbMHYTfbIBDf6Wi9juoIx5KPeKXlp64wntFLJ
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
MIIDJjCCAg6gAwIBAgIBADANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdUUDQ3
MEVBMB4XDTI1MDIxODEzMzY0MloXDTI2MTIxOTEzMzY0MlowEjEQMA4GA1UEAwwH
VFA0NzBFQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKR7Cu5FphfJ
9I22j7SmZDIUgsu2zFZpIkXJ0k6YN9cnT+B1bziyu0dVOlfxf68xTKWWpSiYGl7T
iJrQ45YCWEzjITqC8JV1pbjbEVREYO6vkVPSyw3nEsIAbjSXwgkmuOJ+txDl4ZSG
x6jC4kSVl7689uiyKqWnn8P+pgBFEF2AzsTTBAZT4tEOPoKE+TcQWPaMip28L6/k
Feg+D+zU82z91GlHFBJmGQRFDyKYQclqJe0t9zDJsS3sEHsTN6WKmlMQa6FuCH8K
e21hJHuXayfJo5ZLVFej+qwU5icLmuqiKCi3/O1+qw6f4SdCE9wKOGBs9RE85+kq
QGFqC0qilBUCAwEAAaOBhjCBgzAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB
9jBjBgNVHSUEXDBaBggrBgEFBQcDAQYIKwYBBQUHAwIGCCsGAQUFBwMDBggrBgEF
BQcDBAYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEFBQcDBwYIKwYBBQUHAwgGCCsG
AQUFBwMJMA0GCSqGSIb3DQEBCwUAA4IBAQAKBIDJ8oa2VRL7gV5PUtceOHqtcb+u
gCAXqw7nqO5GsSm9j4k3XxO4/IBUd//H6c+kzapbaLC3skckinJQ0JXKTkBWtsOF
miqdkNF/izqNEMSWpeK11AI8+Ma8Wt+TnnlbmCOu1f7LGQh1aJEKrzQF98L+USI5
L4ihWUjjbvMwsjshKrDVoHbaD7hsSgX8NPJw6U5gxuCvvs4avw8RMbEWYw403I61
JOQa5GrwgPbYMlkTDPnWzz5Hsz4AaRkOznRrtb8B4siYxP9PXqBbqV23DI7bh2bH
wNjpwDkWN+cy6Z7209QrbMHYTfbIBDf6Wi9juoIx5KPeKXlp64wntFLJ
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCkewruRaYXyfSN
to+0pmQyFILLtsxWaSJFydJOmDfXJ0/gdW84srtHVTpX8X+vMUyllqUomBpe04ia
0OOWAlhM4yE6gvCVdaW42xFURGDur5FT0ssN5xLCAG40l8IJJrjifrcQ5eGUhseo
wuJElZe+vPbosiqlp5/D/qYARRBdgM7E0wQGU+LRDj6ChPk3EFj2jIqdvC+v5BXo
Pg/s1PNs/dRpRxQSZhkERQ8imEHJaiXtLfcwybEt7BB7EzelippTEGuhbgh/Cntt
YSR7l2snyaOWS1RXo/qsFOYnC5rqoigot/ztfqsOn+EnQhPcCjhgbPURPOfpKkBh
agtKopQVAgMBAAECggEAC+MBhfk+GOOFOzWZmphYzt65GiBOkaMc8Ta17mylQnUK
moHaJRqTmsLfycm/7MkPDTt/GZkudLJsYaXdgLKQL5RNizU5zk9Xh+27CaA8cht5
kPl/p7ROoHsX+9CI2xDzlRjLwZqfbBS2eq2E3SiDdCsjW+s+VkTwMKGnXQcguOUP
us/bIf01UbD2w9X+TSXLd6vB42BKNbpCnnAoHzNAIy8NImICKJFCcqvv90jubfrQ
M69478QPEeYM5tRv5iGKm48B3pg3/Sl674aKGRzdoR8rAt+iNCMyB0DkQhZckMq5
b4l815FUBirKopcVza6mivsSNnHVo+OQyOR1VKxCkQKBgQDXSpUMEFEooEuWouRa
BvKsllnHMU22UNRbOpA2XK2D08npcVIF5AWOo+5KWeXFiQYsSLR5R/MPR8FaarKD
0JVvhMRV0nXKyXGBCTL+WGUgQ6085PpWuKT5PtDGbYgxCPUIbjo5RGBhIMbQvJV+
7U7dGiCsITMyMyhSuAma6tkARQKBgQDDlOllHLvBQ1op5BmG5dgoQ1KjCigmGsF/
lvnpAKDDO5Nvp4IBU44lOST+XQ9Og/fqwF58lf3ec8ZEkBwEnwgEp1/G+CNv3J/L
+XwLKF+yK4l7mD4HL99PINCklWoHPkp0Zil6XTwX0unRMlq6GvY0xQBYlalputxr
w+4DlssJkQKBgGpgQbEKRu+p9G9j4SzSjgnU6FtR8zIIUkUZdLRHqryeYv/jrEGY
314RheZa8PtfrxsmeXYLpP+B1vnUCoyy/YNyuIgnS2h9jIXTg8zE5ILCrdCO21sK
NQmqjgHdkROZd2lI/Z/aNz0GsvXkmIF0xCjfhhFG/kLpoBzvLl/Ldpl5AoGAHgTe
KenWG5zF2wYqsNzYZ52lsmadsPOMXZQDubKh+jVLtOiF+MQlXis+NVh9P/TbeYmb
Nw4ikCE+/kkMM91g8q3p8nUlo0a+tCUP1/qTbZpnGLROWPYNFW0Y+RoB0yjJbsI7
fY+P6KwzvSs4Z7Y5sfHG0tHt1c+bg2LoRl6/vTECgYBLsMPc+wv2ePo78CSrshgs
QBD53kcKvrN0N1QWme8Bueh0nYeyGRIbukheIU98oVCn9jj3Su/tNHtAsje9JS4I
VTzbu9uEQtFvZ2xuxV8yLv6qu/diH2D3/cbG9Ucb7JKh1TI9iSX4CSvdCDZlhaOc
+zpHZX8kcj42r0qNmzckWw==
-----END PRIVATE KEY-----
</key>
OpenVPN Connect で接続テスト
.ovpn
のファイルをダブルクリックし、OpenVPN Connect を開く
⇒インポートしますか?と出てきたらOK
を押す
⇒プロファイル名は任意で設定し、パスワード保存ボタンを押し、ユーザー名とパスワードは最初にマネージャーで設定したものを入力し、できたら接続を押す
このように、接続できればOK。
SSH の設定
ここからは、サーバー側の SSH の設定を行います。
sudo nano /etc/ssh/sshd_config
SSH の構成ファイルをエディタで開きます
Port
の先頭の #
を消し、80
に設定します
また、PubkeyAuthentication yes
と X11Forwarding yes
も #
を消します
後ほどの SSH 転送ユーザー用のために、次の内容を追記します
Match User ssh
Banner /var/ssh/banner.txt
確認出来たら保存します(Ctrl+X -> Y -> Enter)
SSH 専用ユーザーの作成
今回は、ssh
という名前のユーザーを作成します。
sudo adduser ssh
パスワードは最終使わないので何でもいいです。
次に、ホームディレクトリとシェルを変更します。
sudo nano /etc/passwd
ssh:x:
から始まる行を探します
/home/ssh
を/var/ssh
に、/bin/bash
を/bin/sh
にします。
ファイルを保存し閉じます。
次に、パスワードを無効化します。
sudo nano /etc/shadow
ssh:
から始まる行を探し、1つ目の:
から2つ目の:
までの長い文字列を消し、*
に書き換えます
ファイルを保存し閉じます。
専用ユーザーのセットアップ
ssh
ユーザーの SSH をセットアップします
その前に、ホームディレクトリを作ります。
sudo mkdir /var/ssh
sudo chown ssh:ssh /var/ssh
sudo chmod 750 /var/ssh
sudo su ssh -c "cd ~ && pwd"
/var/ssh
と帰ってくることを確認します
次に、クライアント側 で SSH 鍵を設定します。
鍵を流用するなら無視しても構いません。
ssh-keygen -t ed25519
パスフレーズは任意で設定してください。
次に、その鍵からの接続を許可するための設定をします。
type .\.ssh\id_ed25519.pub
この出力をコピーします
そして、またサーバー側に戻って次のコマンドを実行
sudo mkdir /var/ssh/.ssh
sudo nano /var/ssh/.ssh/authorized_keys
コピーした内容を貼り付け、鍵の前に、
no-pty,command=""
を付け加えます。
no-pty,command="" ssh-ed25519 ...
このような感じですね。
次に、ファイルの権限を修正していきます。
sudo find /var/ssh -exec chown ssh:ssh {} \;
sudo chmod 700 /var/ssh/.ssh
sudo chmod 600 /var/ssh/.ssh/authorized_keys
最後に、接続時に表示されるバナーの設定をします。
sudo su ssh -c "nano ~/banner.txt"
僕は次のようなテキストを設定しています。
Welcome to Syuugo's VPN server !
Don't forget the "-N" option.
If you want to destroy the session, press Ctrl+C.
-N の意味は後でわかります。
好きなように設定してください。
SSH を再起動して完了です
sudo systemctl restart sshd
接続テスト
クライアント側に戻り、次のコマンドで接続を検証します
ssh ssh@[ホスト名] -p 80 -N
Are you ... ? と表示されたら yes を入力すし Enter
先ほど設定したバナーが表示されればOK。
Ctrl+C で終了。
ポート転送
次のコマンドを実行したまま待機します
ssh ssh@[ホスト名] -p 80 -N -L 1194:127.0.0.1:1194
先ほど編集した .ovpn
のファイルを複製し別の名前でコピーします。
メモ帳等で開き、proto udp
をproto tcp
に、remote [ホストIP]
を、remote 127.0.0.1
にして保存。
保存したファイルをダブルクリックで開き、再度 OpenVPN Connect を起動させます。
名前は 転送 とか forward とか付け加えてわかりやすくすることをお勧めします。
これでつながるはずです!
起動簡略化
バッチファイルを使って、ダブルクリックでつながるように設定できます。
OpenVPN Connect から、先にプロファイルの ID を取得します。
@echo off
title Connecting VPN server...
start /min ssh ssh@[ホスト] -p 80 -N -L 1194:127.0.0.1:1194
"C:\Program Files\OpenVPN Connect\OpenVPNConnect.exe" --connect-shortcut=[Profile ID]
これをデスクトップに置くと便利かもしれないですね。
また、このファイルのショートカットを作成し、shell:startup
に入れると、Windows 起動時に勝手に接続してくれます。
Discussion