Dropbox

GitHubにOpenWrt用のSoftetherバッケージがありますので、やり方が分かってしまえば難しくはありません。実際の手順を記述したサイトも沢山見つかります。それでも最初は色々と分からないこともあり時間がかかります。何かの参考のために現時点での有効な手順を記述しておきます。

参考webサイト:
Techie blog – Setting up Softether VPN on OpenWRT : 使われているSDKが古いことを除けば完璧な手順書です。
OpenWrt build system – Installation : OpenWrtの公式ガイド、ここの手順に従って最新のSDKを導入しました。
el1n/OpenWRT-package-softether : GitHubのOpenWrt Softetherパッケージです。

最初、Techi blog – Setting ip Software VPN on OpenWRTの手順に忠実に従ってSoftetherのコンパイルまで完了しましたが、残念ながらこのページで使用しているSDKバージョン”barrier_breaker”には小米ルーターで使用するtargetが入っていませんでした。同じmipsのCPUは含まれているので実際のバイナリーは使用できるかも知れませんが作成したパッケージの導入が出来ませんでした。ここは最新のSDKを使うべきでしょう。またGitHubのOpenWRT-softetherのページやその他の手順書にはsvnでSDKを構築するようになっていますが、現在OpenWrtのサイトのsvnサービスは停止しています。公式手順にあるようにgitコマンドを使用します。

[ SDKの導入 ]
テストではubuntuも使用していましたが、以下の手順はParallels下のCnetOS 7を使用しています。公式ガイドOpenWrt build systemに書かれていることをそのまま実行するだけです。一応、投入したコマンドを書いておきます。

$ sudo yum update
$ sudo yum install subversion binutils bzip2 gcc gcc-c++ gawk gettext flex ncurses-devel zlib-devel zlib-static make patch unzip perl-ExtUtils-MakeMaker glibc glibc-devel glibc-static quilt ncurses-libs sed sdcc intltool sharutils bison wget git-core openssl-devel xz
$ git clone https://github.com/openwrt/openwrt.git
$ cd openwrt

これで最新のstbaleバージョン(わたしの場合は’多分’Chaos Calmer 15.05.1)が導入されました。

[ softetherパッケージの作成 ]
PC上でクロスコンパイルを行いルーター上で動かすためのパッケージを作成します。そのための仕組みは全てSDKに含まれていますし、softetherのコードを完璧にSDKに一体化するための手順が出来上がっていますので、これも手順通りにコマンドを打ち込むだけで大丈夫です。

$ sudo yum install readline-devel
手順書には出てきませんがsoftetherのビルド中にreadlineが無くてエラーしましたので、予め入れておくと良いです。

$ echo "src-git softethervpn https://github.com/el1n/OpenWRT-package-softether.git" >> feeds.conf.default
$ ./scripts/feeds update
$ ./scripts/feeds install softethervpn

以上で準備完了。構成に入ります。

$ make defconfig
$ make menuconfig

まずはTarget Systemを選択しなければなりません。これがなかなか難しいのですが、小米ルーター青春版での答えを書いておきます。
menuconfig
Target Systemで”Ralink RT288x/RT3xxx”を選択、Subtargetで”MT7628 based boards”を選択します。上のキャプチャのようになります。

次にNetwork/VPN/softethervpnを選択すれば構成は完了です。

$ make prepare V=s

ネットワーク環境など不安があるので詳しい経過メッセージを表示するためにV=sを指定しました。このステップは私の環境で2時間弱の時間を要しました。

$ make package/softethervpn/compile V=s

これでパッケージの作成が完了です。わたしの場合”./bin/ramips/packages/softethervpn/softethervpn_4.19-9605_ramips.ipk”が出来上がったパッケージです。これをscp等でルーターの/tmp/にコピーします。

$ scp ./bin/ramips/packages/softethervpn/softethervpn_4.19-9605_ramips.ipk root@192.168.1.1:/tmp/

[ ルーターでの導入作業 ]
ルーターにrootログインします。

# opkg update
# opkg install zlib libpthread librt libreadline libncurses libiconv-full kmod-tun libopenssl
# opkg install /tmp/softethervpn_4.19-9605_ramips.ipk

これでvpnserver, vpnbridge, vpnclientが走り出しました。わたしはvpnbridgeだけを使用するのでLuCIのSystem/Startupからvpnserverとvpnclientを停止し、また自動起動をDisableにしました。

面白いのはバイナリーは一つだけでvpncmdまで共用されています。どうやって実現しているのか時間があれば調べてみたいです。また通常ですと日々沢山のログを吐き出すので容量の小さなサーバーではログ管理をどうしようかと思っていましたが、まったくログを吐かないようになっていました。

[ softetherの設定 ]
細かいことは書きませんが、とりあえずsoftetherの設定にて仮想ハブをすでに存在するブリッジbr-lanに接続し、LuCIからルーターのLANに設定されているIP Addressを調整することによりパケットが流れるようになりました。

Trackback

3 comments untill now

  1. […] – 「小米ルーター青春版 + OpenWrtにSoftether VPNを導入する」 – 「小米WiFiルーター青春版 + OpenWrtにstoneを導入する」 ひとつだけ訂正があります。 STAGING_DIR指定するのはopenwrt/staging_d […]

  2. あのん @ 2017-10-01 17:17

    > 面白いのはバイナリーは一つだけでvpncmdまで共用されています。

    SoftEther自体もともと「Ceder」と「Mayaqua」という2つのライブラリ的なもので構成されていてその中に全機能が含まれています。

    そして、「vpncmd」「vpnserver」「vpnclient」「vpnbride」は単にそのライブラリから最初に呼び出す部分が違うだけなので、呼び出し元の名前に応じてどの部分を呼び出すかを選ぶロジックだけ書けば簡単にまとめることができます。

    通常版との呼び出し互換性がいらないのであれば、完全に1ファイルにすることも可能です。
    vpntool [-cmd | -server | -client | -bridge] [other arguments]
    のように…

  3. あのんさま、
    ありがとうございます。もともと、そういう作りだったのですね。知りませんでした。

Add your comment now