ラズパイでSoftEtherを用いてL2レイヤーをVPN接続する

Invalid date

背景

自宅に wifi 接続できない HDD レコーダーがあった。が、家庭内で LAN ケーブルは伸ばしたくない。 PXE ブートさせたい。かつ wifi で行いたい(PXE するマシンとイーサネットコンバーターは別マシンの構成)

つまりイーサネットコンバーターが欲しかった。 ラズパイをイーサネットコンバーターにする場合、内部的に DHCP を建てる設定例があったが、 できれば同一ネットワークでコンバーターが透過的に動作するようなものが欲しかった。 手軽に使える SoftEther でレイヤー 2 カスケードする設定で接続した。

ネットワーク構成

SoftEther のクライアント、サーバー共にラズベリーパイをGenPi64でセットアップして利用。 ただ nmcli( NetworkManager の CLI ツール )が使えれば他構成でもセットアップできそう。

HDDレコーダー and PXEブートしたいマシン => GenPi64, SoftEtherクライアント => GenPi64, SoftEtherサーバー => Internet

という形で外部に出れるようにする。

SoftEther サーバーではイーサネットインターフェースのみの運用とし、tap デバイスをブリッジする構成にした。

方針としては、基本的に使わない機能は off、必要に応じて有効にする。

  • 仮想ハブ名: VpnHub1
  • ダイナミック DNS 機能、DDDS: Off
  • VPN Azure クラウド: off
  • IPsec/L2TP/L2TPv3 サーバー機能の設定: off
  • OpenVPN/MS-SSTP サーバー機能設定: off
  • SecurNAT 機能、DHCP サーバー機能は使わない。
  • カスケード接続は使う*(レイヤ 2 カスケード接続になる)
  • SoftEther のサーバー/クライアント共に [ローカルブリッジ設定]=>[eth0] と物理インターフェースでブリッジを行う

ヘルプ

sudo vpncmd  localhost /SERVER  /CMD 'help'

環境

サーバー/クライアントともに共通

イーサネットコンバーターになる SoftEther クライアントでの事前作業

PC => eth => wifi => SoftEther サーバー => インターネット と接続するので、

  • wifi のセットアップ
  • eth の設定の無効化 を行う。
手順

ネットワークデバイス名を確認。GenPi64 では

  • wlan0 が wifi
  • eth0 がイーサネット というインターフェース名だった。
nmcli dev status

wifi をオンにして IP アドレスを確認。

sudo nmcli d wifi connect <ssid> password <pass> ifname wlan0
ip a

wifi 側の IP アドレスで ssh し直したのち eth の IP アドレスを無くす

sudo nmcli connection mod "有線接続 1" connection.autoconnect no
sudo reboot

ラズパイを再起動、wifi 経由で ssh、eth0 がアクティベートされない事を確認。

nmcli dev status

SoftEther 設定*( サーバー/クライアント共通 )

DDns、NAT トラサーバル、IPv6 の無効化。 デーモンを停止してから行う。

sudo vpnserver stop
sudo vi /usr/vpnserver/vpn_server.config

変更箇所

  • DDnsClient.Disabled を true
  • ServerConfiguration.DisableIPv6Listener true
  • ServerConfiguration.DisableNatTraversal true

SoftEther の設定箇所が多いのでバッチファイルを作成し、 下記のように、 /IN: オプションの引数にわたして実行する。この例では setup.txt に処理を記載していっている。

sudo vpncmd  localhost /SERVER  /IN:setup.txt

内容は vpncmd で接続した後に行う処理を書いたものになる。

設定方法については 【Centos7】SoftEther Server 構築手順【L2TP/IPsec】を参考にした。

setup.txt 内の下記の の箇所は、それぞれ異なるものに変更すること。

  • ServerPasswordSet
  • HubCreate VpnHub0_dummy /PASSWORD:
  • HubCreate VpnHub1 /PASSWORD:
  • UserPasswordSet HubUser1 /PASSWORD:

setup.txt のサンプル

KeepDisable
OpenVpnEnable  no  /PORTS:1194
SstpEnable  no
VpnAzureSetEnable  no
VpnOverIcmpDnsEnable  /ICMP:no  /DNS:no
ListenerCreate 44444
ListenerDelete 443
ListenerDelete 992
ListenerDelete 1194
ListenerDelete 5555
HubDelete  DEFAULT
HubCreate  VpnHub0_dummy /PASSWORD:<password>
HubCreate  VpnHub1 /PASSWORD:<password>
IPsecEnable /L2TP:yes /L2TPRAW:no /ETHERIP:no /PSK:ipsecvpn /DEFAULTHUB:VpnHub0_dummy
Hub VpnHub0_dummy
SetEnumDeny
SetMaxSession 1
Offline
Hub  VpnHub1
SetEnumDeny
SetMaxSession  1
OnLine
NatDisable
DhcpDisable
UserCreate HubUser1 /GROUP:none /REALNAME:none /NOTE:none
UserPasswordSet HubUser1 /PASSWORD:<password>

vpnserver をスタートしてから実行

sudo vpnserver start
sudo vpncmd  localhost /SERVER  /IN:setup.txt

以降、接続ポートは 44444 になるので下記のように接続する。

sudo vpncmd  localhost:44444 /SERVER

下記コマンドで変更した内容を確認する。

  • HubList
  • ListenerList
  • IPsecGet
  • NatGet
  • SecureNatStatusGet
  • UserList

SoftEther クライアント特有の設定

VpnHub1 で「カスケード接続の管理」から Proxy にレイヤー 2 でカスケードする。 ServerPasswordSet で SoftEther サーバーのパスワードを設定し台帳にメモ。 BridgeCreate で SoftEther の仮想ハブとイーサネットの物理ポートを接続する*(物理ポート配下のデバイスと SoftEther の仮想ハブが接続される) CascadePasswordSet で HubUser1 のユーザーパスワードをセットした。

ServerPasswordSet <password>
BridgeCreate VpnHub1 /DEVICE:eth0
Hub vpnHub1
CascadeCreate cascade_proxy /SERVER:<プロキシーサーバーのIPアドレス>:44444 /HUB:VpnHub1 /USERNAME:HubUser1
CascadePasswordSet cascade_proxy /PASSWORD:<password> /TYPE:standard
CascadeOnline cascade_proxy

SoftEther サーバー特有の設定

ServerPasswordSet で SoftEther サーバーのパスワードを設定し台帳にメモ。 ローカルブリッジの設定を行い、物理デバイスを eth0 に紐付ける(tap デバイスは作らない)

ServerPasswordSet <password>
BridgeCreate VpnHub1 /DEVICE:eth0

SoftEther の通常の使用ポート

3.3.6 リスナーポート

接続できる方法を多く用意するためだろうか、デフォルトで開くポートがいくつかある。

ポート 用途
TCP 443 SSL 用
TCP 992 TELNET over SSL (Telnets)
TCP 1194 OpenVpn
TCP 5555

失敗のメモ

sudo nmcli d disconnect eth0 だと再起動後、eth0 が有効になったため、 nmcli connection mod “有線接続 1” connection.autoconnect no を用いるようにした。

参考

VPN サーバー構築(SoftEther VPN Server) Linux での VPN クライアントの CLI での接続方法が参考になった。

【Centos7】SoftEther Server 構築手順【L2TP/IPsec】 この人すごい。CLI での設定例が非常に参考になる。

3.6 ローカルブリッジ オフィシャルページの説明。これがやりたい。

Linux や Solaris の場合は、ローカルブリッジ用 LAN カードに対して「ifconfig」コマンドなどで、 IP アドレス「0.0.0.0」を割り当てるなどの方法で 、同等の効果を得ることができます。 なるほど。

SoftEther VPN サーバのローカルブリッジをコマンド操作だけで設定する方法 今回の私の目的、イーサネットコンバーターだと、 wifi インターフェースだけ IP アドレスがあれば良く、 イーサネットインターフェースには IP アドレスは不要なので参考になった。 「tap デバイスは不要」という点は非常に参考になった。確かにそうだ。

6.2.3 vpncmd コマンド起動時のコマンドラインパラメータ 処理の自動化の参考になった。

sudo vpncmd  localhost /SERVER  /IN:setup.txt

のようにする事でバッチ処理が可能。

SoftEherVPN で TAP デバイスとのブリッジが失敗する場合 上記の方法では tap デバイスを使わなくても済んだが、使うようになったら参考にする。

ESXi 上の仮想マシンに SoftEther VPN Server を入れる際の注意点 プロミスキャス・モードでリッスンできる必要がある

Android から接続 [L2TP/IPsec サーバを構築してアンドロイド端末で VPN を利用する]*(https://mano.xyz/post/2016-06-22-l2tp-ipsec/)

mac から接続 VPS 上に SoftEther VPN Server をセットアップして OS X からつなぐ


Profile picture

Written by tin-machine 技術関連のメモ Twitter