2020 Jun. 07.
2020 May 21.
2020 May 17.
2020 May 16.
2020 Apr. 11.
2020 Apr. 07.
2020 Apr. 05.
2020 Apr. 04.
出典
https://rauq04.blogspot.com/2014/02/linux-softether-vpn-client-vpngate.html
https://qiita.com/onokatio/items/aa656c23e24d721eed31
https://ja.softether.org/1-features/1._%E6%A5%B5%E3%82%81%E3%81%A6%E5%BC%B7%E5%8A%9B%E3%81%AA_VPN_%E6%8E%A5%E7%B6%9A%E6%80%A7
手順
この作業ではパケットのルーティングテーブルを書き換えるので、LAN外部との通信が作業中に遮断される。
したがって、ホストがLAN外と通信中は作業してはならない。
外部からリモート作業する場合は、LAN内の別のホストに外部からSSH接続し、そこから目的のホストにSSH接続する等、工夫を要する。
vpncmdコマンドで作成される仮想ネットワークインターフェース名とLinux上に表示される仮想ネットワークインターフェース名は異なるので要注意。
SoftEtherサーバーはHTTPS ベースの VPN プロトコルを採用している。
Ethernet over SSL (Ethernet over HTTPS)
SoftEtherサーバーはレガシーなVPNプロトコルもサポートしている。
VPNL2TP/IPsec VPN (L2TP over IPsec)
MS-SSTP (PPP over HTTPS)
OpenVPN (IP over TCP/UDP)
L2TPv3/IPおよびEtherIP/IPsec
1.SoftEther VPN Clientをインストール
https://www.softether-download.com/ja.aspx?product=softether
https://qiita.com/Daisuke-Otaka/items/b9d99c9dcbb84cf813d7
・ソースをダウンロード・解凍する
・ソースをビルドする
$ make
・ビルドしたディレクトリを/usr/local以下の適当なところに移動する
$ sudo make install ではなく、そのまま移動する
・ファイル属性を設定
2.https://www.vpngate.net/ja/ から VPN Gateサーバーアドレスを取得(毎作業毎に行う)
回線速度の速いサーバーのアドレス検出
$ wget http://www.vpngate.net/api/iphone/ -O - 2> /dev/null | grep JP | grep Daiyuu | sort -rn -k 5 -t "," | grep -oP -m 1 '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
接続アカウントに登録したサーバーアドレス(AAA.BBB.CCC.DDD)の存在確認
$ wget http://www.vpngate.net/api/iphone/ -O - 2> /dev/null | grep -o 'AAA.BBB.CCC.DDD'
3.VPN Gateサーバーへのパケットがデフォルトゲートウェイを必ず通過するようにルーティングテーブルを設定(毎作業毎に行う)
# route add VPN-SERVER-ADDRESS gw YOUR-LAN-GATEWAY-ADDRESS dev REAL-NIC
4.vpnclientを起動(毎作業毎に行う)
# cd VPNCLIENT-DIR/
# ./vpnclient start
5.vpncmdを起動(毎作業毎に行う)
# ./vpncmd
(画面表示)
1. VPN Server または VPN Bridge の管理
2. VPN Client の管理
3. VPN Tools コマンドの使用 (証明書作成や通信速度測定)
1 - 3 を選択: 2
接続先のホスト名または IP アドレス: (Enterのみを押す)
6.( VPN Client> PasswordSet は不要 )
7.仮想NICを作成(初回のみ)
VPN Client> NicCreate vpn0
vpn0は任意の仮想NIC名
8.仮想NIC有効化(初回のみ)
VPN Client> NicEnable vpn0
9.接続アカウントを作成(初回のみ)
VPN Client> AccountCreate vpngate /SERVER:VPN-SERVER-ADDRESS:PORT /HUB:VPNGATE /USERNAME:vpn /NICNAME:vpn0
vpngateは任意のアカウント名
VPN-SERVER-ADDRESS:PORTはサーバーIPアドレス:ポート番号
VPNGATEは任意のハブ名
vpnは任意のユーザー名
例 VPN Client>AccountCreate vpngate /SERVER:222.111.333.444:443 /HUB:VPNGATE /USERNAME:vpn /NICNAME:vpn0
10.匿名ログイン設定(初回のみ)
VPN Client> AccountAnonymousSet ACCOUNTNAME
例 VPN Client> AccountAnonymousSet vpngate
11.VPN Gateサーバーのアドレスをアカウントに設定(毎作業毎に行う)
VPN Client> AccountSet ACCOUNTNAME /SERVER:VPN-SERVER-ADDRESS:PORT /HUB:HUBNAME
例 VPN Client> AccountSet vpngate /SERVER:222.111.333.444:443 /HUB:VPNGATE
12.VPN Gateサーバーへの接続(毎作業毎に行う)
VPN Client> AccountConnect vpngate
VPN Client> exit
13.仮想NICへのアドレスセット(毎作業毎に行う)
$ ip a show vpn_vpn0
vpncmdで作ったNICに"vpn_"を付したものが仮想NIC。
IPV4アドレスがセットされていないはず。
# dhclient -v vpn_vpn0
確認
$ networkctl status
14.デフォルトゲートウェイを変更(毎作業毎に行う)
デフォルトゲートウェイを、物理NICを通過するルートから仮想NICを通過するルートに変更する
仮想NICのアドレスの下位17bitから32bit部分を 254.254 としたアドレスをデフォルトゲートウェイアドレスに設定する
例 仮想NICのアドレス確認
$ ifconfig vpn_vpn0
inet 10.242.217.69 -> デフォルトゲートウェイアドレスは 10.242.254.254
ホストがLAN外部と通信していないことを確かめて
物理NICを通過するデフォルトゲートウェイを削除
# route del default
仮想NICを通過するデフォルトゲートウェイをセット
# route add default gw 10.242.254.254 dev vpn_vpn0
VPN Gateサーバーを経由した通信を確かめる
$ networkctl status
$ traceroute www.yahoo.co.jp
名前解決ができない時は /etc/resolv.conf の最終行に
nameserver 8.8.8.8
とgoogleネームサーバーをセカンダリネームサーバーに指定してみる
15.VPN Gateサーバー経由のインターネット接続を利用する
16.VPN Gateサーバー接続終了(毎作業毎に行う)
# route del default
# route add default gw YOUR-LAN-GATEWAY-ADDRESS dev REAL-NIC
# route del VPN-SERVER-ADDRESS
# ./vpncmd (最初の質問に 2 を選択し、次の質問にはEnterのみを押す)
VPN Client> AccountDisconnect vpngate
VPN Client> exit
# ./vpnclient stop
17.dhclientを停止する
$ ps ax -f | grep dhclient
# kill -9 DHCLIENT-PROCESS
vpncmdコマンドプロンプトに入らず、シェルプロンプト上で処理する場合(スクリプト処理用)
(上記1は同じ)
2.https://www.vpngate.net/ja/ から VPN Gateサーバーアドレスを取得(毎作業毎に行う)
回線速度の速いサーバーのアドレス検出
$ VpnServerAdress=`wget http://www.vpngate.net/api/iphone/ -O - 2> /dev/null | grep JP | grep Daiyuu | sort -rn -k 5 -t "," | grep -oP -m 1 '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'`
3.VPN Gateサーバーへのパケットがデフォルトゲートウェイを必ず通過するようにルーティングテーブルを設定(毎作業毎に行う)
$ su -
# RealNIC=`route | grep -m 1 default | sed 's/[\t ]\+/\t/g' | cut -f 8`
# RealGWayAddress=`route -n | grep ${RealNIC} | sed 's/[\t ]\+/\t/g' | cut -f 2 | sort -r | sed -n '1,1p'`
# route add ${VpnServerAdress} gw ${RealGWayAddress} dev {$RealNIC}
4.vpnclientを起動(毎作業毎に行う)
# PathVpnClientCom=`find /usr/ -name vpnclient`
# DirVpnClient=`dirname ${PathVpnClientCom}`
# cd $DirVpnClient
# ./vpnclient start
5.仮想NICを作成
# ./vpncmd localhost /CLIENT /CMD NicCreate vpn0
vpn0は任意の仮想NIC名
6.仮想NIC有効化
# ./vpncmd localhost /CLIENT /CMD NicEnable vpn0
(存在する仮想NIC名の取得)
# ./vpncmd localhost /CLIENT /CMD AccountList | grep LAN | sed -e "s/^.*|//"
7.接続アカウントを作成
# ./vpncmd localhost /CLIENT /CMD AccountCreate vpngate /SERVER:VPN-SERVER-ADDRESS:PORT /HUB:VPNGATE /USERNAME:vpn /NICNAME:vpn0
vpngateは任意のアカウント名
VPN-SERVER-ADDRESS:PORTはサーバーIPアドレス:ポート番号
VPNGATEは任意のハブ名
vpnは任意のユーザー名
8.匿名ログイン設定
# ./vpncmd localhost /CLIENT /CMD AccountAnonymousSet vpngate
9.VPN Gateサーバーのアドレスをアカウントに設定(毎作業毎に行う)
# ./vpncmd localhost /CLIENT /CMD AccountSet ACCOUNTNAME /SERVER:VPN-SERVER-ADDRESS:PORT /HUB:HUBNAME
例 # ./vpncmd localhost /CLIENT /CMD AccountSet vpngate /SERVER:222.111.333.444:443 /HUB:VPNGATE
10.VPN Gateサーバーへの接続(毎作業毎に行う)
# AccountName=`./vpncmd localhost /CLIENT /CMD AccountList | grep 接続設定名 | sed -e "s/^.*|//"`
# ./vpncmd localhost /CLIENT /CMD AccountConnect ${AccountName}
11.Linux上の仮想ネットワークインターフェースへのアドレスセット(毎作業毎に行う)
# VpnNIC=`./vpncmd localhost /CLIENT /CMD AccountList | grep LAN | sed -e "s/^.*|//"`
# LinuxVirNIC=`ip l | grep -Po "\S+${VpnNIC}"`
# dhclient $LinuxVirNIC
12.デフォルトゲートウェイを変更(毎作業毎に行う)
デフォルトゲートウェイを、物理ネットワークデバイスを通過するルートから仮想ネットワークデバイスを通過するルートに変更する
仮想NICのアドレスの下位17bitから32bit部分を 254.254 としたアドレスをデフォルトゲートウェイアドレスに設定する
# VirNicAddress=` ip -4 a show ${LinuxVirNIC} | grep -Po "inet\s+[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" | grep -Po "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+"`
# VirGWayAddress=`echo ${VirNicAddress} | grep -Po "[0-9]+\.[0-9]+\."`
# VirGWayAddress="${VirGWayAddress}254.254"
# route del default
# route add default gw ${VirGWayAddress} dev ${LinuxVirNIC}
13.VPN Gateサーバー経由のインターネット接続を利用する
14.VPN Gateサーバー接続終了(毎作業毎に行う)
# route del default
# route add default gw ${RealGWayAddress} dev {$RealNIC}
# route del ${VpnServerAdress}
# ./vpncmd localhost /CLIENT /CMD AccountDisconnect ${AccountName}
# ./vpnclient stop
15.dhclientを停止する
while :
do
NumPsLines=`ps ax -f | grep "dhclient .*${LinuxVirNIC}" | grep -v grep | wc -l
if [ $NumPsLines -lt 1 ]
then
break
fi
PidDhclient=`ps ax -f | grep -v grep | grep -m1 "dhclient .*${LinuxVirNIC}" | sed -n '1,1p' | sed 's/[\t ]\+/\t/g' | cut -f 2`
kill -9 ${PidDhclient}
done