🛡️

学校のPCでフィルタリングを回避?!

2025/02/19に公開

今回は、学校の 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 falsefalsetrue に変更し保存
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 tapdev tun に書き換え
<ca>の部分の、-----BEGIN CERTIFICATE-----から、-----END CERTIFICATE-----をコピーし、<cert>から</cert>の間に貼り付ける
 この時、この間の;はすべて除去する
⇒開いてある.keyのファイルの中身をすべてコピーし、<key>の中身に貼り付ける
 同様に、この間の;はすべて除去する

プロファイルのサンプル(修正後)

tp470ea_openvpn_site_to_site_bridge_l2.ovpn
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 yesX11Forwarding yes# を消します
後ほどの SSH 転送ユーザー用のために、次の内容を追記します

/etc/ssh/sshd_config
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="" を付け加えます。

/var/ssh/.ssh/authorized_keys
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 udpproto 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