Alpine Linuxにvpnを入れる
September 25, 2020
linux AlpineLinuxはじめに
vpn機能を使うと、出先のノートPCから自宅のファイルサーバにアクセスしたり、外出先のスマホで自宅サーバのWebアプリにアクセス出来たりと、とても便利です。
最近ではルーターにvpn機能が搭載されている場合が多いので、あえて自前でvpnサーバを用意する必要性は薄いのですが、筆者宅のルーターはダイナミックDNS機能が無かったので、ダイナミックDNSが無料で使えるSoftEtherVPNを導入しました。
自宅LANをvpnでアクセスする場合、自宅LANのルーターのWAN側IPアドレスを指定する必要がありますが、このアドレスはプロバイダーから付与されるもので、プロバイダーの都合で変化する場合があります。ダイナミックDNS機能があれば、アドレスが変わっても、WAN側IPアドレスをいつも同じ名前でアクセスできるようになります。
尚、自宅LANとインターネットはルーターのPPPoE接続で繋がっているものとします。IPoE接続の場合は、SoftetherVPNをIPoE(IPv6)環境で動かすを参照してください。
SoftEther VPNサーバのインストール
以下の記事を参考に、SoftEther VPNサーバをdocker-composeでインストールします。
【参考】
http://llamerad-jp.hatenablog.com/entry/2016/12/24/152358
VPNサーバを仮想マシン上に建てようとしてハマった話
VirtualPCのブリッジアダプタのプロミスカスモードをONにする。
https://eidera.com/blog/2017/08/31/construction_vpn_server_in_one_minute/
1分でVPNサーバを構築する
インストール
$ git clone https://github.com/eidera/softethervpn-docker
$ cd softethervpn-docker
ディレクトリ構成
softethervpn-docker\
build\
Dockerfile
vpnserver\
vpn_server.config
README.md
docker-compose.yml
docker-compose.yml中のユーザー名やパスワードなどを好きな値に編集
version: '3'
services:
vpn:
container_name: vpn
build:
context: .
dockerfile: ./build/Dockerfile
args:
SOFTETHER_URL: "https://jp.softether-download.com/files/softether/v4.22-9634-beta-2016.11.27-tree/Source_Code/softether-src-v4.22-9634-beta.tar.gz"
HUB_NAME: 記載する
HUB_PASSWD: 記載する
USER_NAME: 記載する
USER_PASSWD: 記載する
COMMON_SECRET: 記載する
volumes:
- ./vpnserver/vpn_server.config:/usr/vpnserver/vpn_server.config
- vpn_data:/usr/vpnserver
ports:
- '500:500/udp'
- '4500:4500/udp'
volumes:
vpn_data:
FROM amazonlinux:2017.03
RUN yum install -y gcc make ncurses-devel openssl-devel readline-devel wget iptables
ARG SOFTETHER_URL="https://jp.softether-download.com/files/softether/v4.22-9634-beta-2016.11.27-tree/Source_Code/softether-src-v4.22-9634-beta.tar.gz"
ARG HUB_NAME="DefaultHub"
ARG HUB_PASSWD="DefaultHubPassword"
ARG USER_NAME="DefaultUser"
ARG USER_PASSWD="DefaultUserPassword"
ARG COMMON_SECRET="commonsec"
RUN cd / && \
mkdir -p softether_vpn && \
cd softether_vpn && \
wget ${SOFTETHER_URL} && \
tar zxvf *.tar.gz && \
cd $(tar ztvf *.tar.gz| head -n1 | awk '{print $NF}') && \
cp -f src/makefiles/linux_64bit.mak Makefile && \
make && \
make install && \
make clean && \
rm -rf /softether_vpn
RUN /usr/vpnserver/vpnserver start && \
sleep 5 && \
vpncmd /SERVER localhost /ADMINHUB:DEFAULT /CMD HubCreate ${HUB_NAME} /PASSWORD:${HUB_PASSWD} && \
vpncmd /SERVER localhost /ADMINHUB:${HUB_NAME} /CMD UserCreate ${USER_NAME} /GROUP:none /REALNAME:none /NOTE:none && \
vpncmd /SERVER localhost /ADMINHUB:${HUB_NAME} /CMD UserPasswordSet ${USER_NAME} /PASSWORD:${USER_PASSWD} && \
vpncmd /SERVER localhost /ADMINHUB:${HUB_NAME} /CMD IPsecEnable /L2TP:yes /L2TPRAW:no /ETHERIP:no /PSK:${COMMON_SECRET} /DEFAULTHUB:${HUB_NAME} && \
vpncmd /SERVER localhost /ADMINHUB:${HUB_NAME} /CMD SecureNatEnable && \
vpncmd /SERVER localhost /ADMINHUB:${HUB_NAME} /CMD NatEnable && \
vpncmd /SERVER localhost /ADMINHUB:${HUB_NAME} /CMD DHCPEnable && \
/usr/vpnserver/vpnserver stop
CMD /usr/vpnserver/vpnserver execsvc
EXPOSE 500/udp 4500/udp
confファイルを修正
....
declare ListenerList
{
declare Listener0
{
bool DisableDos false
bool Enabled false ← ポート443での待ち受けを無効化※Apacheと競合するため
uint Port 443
}
declare Listener1
{
bool DisableDos false
bool Enabled false ← ポート992での待ち受けを無効化
uint Port 992
}
declare Listener2
{
bool DisableDos false
bool Enabled false ← ポート1194での待ち受けを無効化
uint Port 1194
}
declare Listener3
{
bool DisableDos false
bool Enabled true
uint Port 5555
}
}
VPNサーバ起動
$ docker compose up -d
ルータの設定
VPNサーバを立てたPCは、自宅LAN内に置かれますから、外部からの接続要求をルータでポートフォワーディングする必要があります。 NTT西日本のルータ RT-500KIを例に、ポートフォワーディングの設定方法をまとめておきます。
宛先IPアドレスにVPNサーバが稼働するPCのIPアドレスを指定します。
トップページ > 詳細設定 > 静的IPマスカレード設定
トップページ > 詳細設定 > 静的IPマスカレード設定 > エントリ1編集
トップページ > 詳細設定 > 静的IPマスカレード設定 > エントリ2編集
ダイナミックDNSの設定
SoftEther VPNのダイナミックDNSを設定すると、
vpn999999999.softether.net
という名前の自分のドメイン名がもらえます。VPNクライアントを設定する際、自宅VPNサーバのアドレスとして、ルータのWAN側のIPアドレスを直接設定するのではなく、vpn999999999.softether.netを設定することにより、WAN側のIPアドレスが変化しても、VPN設定を使い続けることができるようになります。
本節では、Windos10上のSoftEther VPN Serverマネージャを使用して、ダイナミックDNSを設定し、自分のドメイン名vpn999999999.softether.netを取得する手順を解説します。(ちなみに、Mac用のVPN Serverマネージャもあるようです)
(注)SoftEther VPNサーバは前述の設定で、Linux上にインストールされています。本節で設定するのはダイナミックDNSのみです。
VPN Serverマネージャのインストール(Windows10)
SoftEther ダウンロードセンター
https://www.softether-download.com/ja.aspx?product=softether
ダウンロードするソフトウェアを選択:SoftEther VPN(Freeware)
コンポーネントを選択:SoftEther VPN Server
プラットフォームを選択:Windows
CPU を選択:Intel(x86 and x64)
を指定すると、該当モジュールがリストされます。その中から、
SoftEther VPN Server and VPN Bridge
をダウンロードし、インストールします。
VPN Serverマネージャの設定
SoftEther VPN Server Managerを起動します。これで、linux上にインストールしたSoftEther VPN ServerをWindowsで管理できます。
SoftEther VPN Server Managerを起動したら、「新しい接続設定(N)」をクリックし、linux上にインストールしたSoftEther VPN Serverとの接続を確立させます。
「新しい接続設定の作成」で、
接続先ホスト名:(SoftEther VPN Serverをインストールした PC のIPアドレス)
接続先ポート番号:5555
を指定し、接続設定を作成します。接続の際、パスワードを聞かれますので、SoftEther VPN Serverをインストールした PC のルートのパスワードを入力してください。 SoftEther VPN Serverとの接続が確立すると、以下のウィンドウが表示されます。
ここで、「仮想HUBの作成(C)」ボタンをクリックし、仮想HUBを作成します。 仮想HUBの新規作成ウィンドウが開きます。
仮想HUB名:docker-compose.ymlのHUB_NAMEで指定した名前
パスワード:docker-compose.ymlのHUB_PASSWDで指定した文字列
を指定して、「OK」をクリックします。仮想HUBの管理ウィンドウが開きます。
ここで、VPNサーバの設定をGUIで行うことはできますが、そもそもこのサーバは、docker composeで設定しているので、
$ docker compose down -v
と、-vオプションをつけてコンテナを削除すると、せっかく指定した設定が一瞬で消えてしまいます。VPN Serverマネージャは、ダイナミックDNSのためだけに利用すると割り切りましょう。
VPN サーバの管理ウィンドウに戻り、「ダイナミックDNS設定」をクリックすると、「ダイナミックDNS機能」ウィンドウが開きます。
ここの「ダイナミックDNSホスト名の変更(C):」に表示される、vpn999999999.softether.netが、今回設定したVPNサーバのアドレスになります。好みの名前に変更も可能です。このアドレスをVPNで接続するクライアントPCやスマホに設定します。
Macクライアント
ここで構築したvpnサーバへの、Macからの接続方法をまとめておきます。
コントロールパネル >> ネットワーク
左側のリストの「+」クリックし、VPNインターフェースを追加します。
インターフェース:VPN
VPNタイプ:L2TP over IPsec
サービス名:VPN(L2TP)
を指定します。
構成:デフォルト
サーバアドレス:ダイナミックDNSのアドレスvpn999999999.softether.net
アカウント名:docker-compose.ymlのUSER_NAME
を指定します。
「詳細設定…」をクリックします。
ユーザ認証:パスワード:docker-compose.ymlのUSER_PASSWD
コンピュータ認証:共通シークレット:docker-compose.ymlのCOMMON_SECRET
を指定して、「OK」をクリックします。
次に、「詳細…」をクリックし、 「オプション」タブ:「すべてのトラフィックをvpn接続経由で送信」にチェックを入れます。
以上を設定したら、「接続」クリックすると、vpn接続モードになります。
iPhoneクライアント
ここで構築したvpnサーバへの、iPhoneからの接続方法をまとめておきます。
設定 >> 一般 >> VPN >> VPN構成を追加…
タイプ:L2TP
説明:適当に名前を付ける
サーバ:ダイナミックDNSのアドレスvpn999999999.softether.net
アカウント:docker-compose.ymlのUSER_NAME
RSA SecurID:OFF
パスワード:docker-compose.ymlのUSER_PASSWD
シークレット:docker-compose.ymlのCOMMON_SECRET
全ての信号を送信:ON
を設定し、「完了」をタップ
設定 >> 一般 >> VPN >> 状況 「未接続」を「接続」にすると、vpn接続モードになります。
または、
設定 >> vpn
をONにすると、vpn接続モードになります。
Windows10クライアント
設定 >> ネットワークとインターネット >> VPN >> VPN接続を追加する
VPN接続を追加ウィンドウに遷移する。
VPNプロバイダー:WIndows(ビルトイン)
接続名:適当に名前を付ける
サーバー名またはアドレス:ダイナミックDNSのアドレスvpn999999999.softether.net
VPNの種類:事前共有キーを使ったL2TP/IPsec
事前共有キー:docker-compose.ymlのCOMMON_SECRET
サインイン情報の種類:ユーザ名とパスワード
ユーザ名:docker-compose.ymlのUSER_NAME
パスワード:docker-compose.ymlのUSER_PASSWD
を設定し、「保存」をタップ
設定 >> ネットワークとインターネット >> VPN
追加した設定をクリックし、「接続」ボタンをクリックすると、vpn接続モードになります。