ラズパイでSoftEtherVPNを構築しました。
はじめて行うので間違っている点ありましたらご指摘ください
前回
↓文字化けちゃってますね...
TODO
- VPN接続
- VPN切断
前提
技術 | |
---|---|
OS | Ubuntu Server 20.10 |
サーバ | raspberry pi 4B(RAM 4GB)(arm64) |
クライアント | macOS Big Sur 11.2.2 |
Catalinaでも動作確認が取れました。
初期設定を終えた状態で作成してください。
手順
iPhoneでテザリングして進めています。
お手持ちのスマホなどで検証してみてください。
1. VPN接続
% brew install --cask tuntap
% cd /usr/local/vpnclient
% sudo ./vpnclient start
% sudo ./vpncmd
### 略 ###
1. Management of VPN Server or VPN Bridge
2. Management of VPN Client
3. Use of VPN Tools (certificate creation and Network Traffic Speed Test Tool)
Select 1, 2 or 3: 2
接続先の VPN Client が動作しているコンピュータの IP アドレスまたはホスト名を指定してください。
何も入力せずに Enter を押すと、localhost (このコンピュータ) に接続します。
接続先のホスト名または IP アドレス: localhost
VPN Client "localhost" に接続しました。
VPN Client>AccountConnect AC_SAMPLE
AccountConnect コマンド - 接続設定を使用して VPN Server へ接続を開始
コマンドは正常に終了しました。
VPN Client>AccountStatusGet AC_SAMPLE
AccountStatusGet コマンド - 接続設定の現在の状態の取得
接続設定の名前: AC_SAMPLE
項目 |値
------------------------------+------------------------------------------------------------------------
接続設定名 |AC_SAMPLE
セッション接続状態 |接続完了 (セッション確立済み)
VLAN ID |-
サーバー名 |sample-dns.softether.net
ポート番号 |TCP ポート 443
サーバー製品名 |SoftEther VPN Server (32 bit)
### 略 ###
ここまででVPN接続が完了しました。
以降は、
- tap0にIP割当
- ルーティング追加
- 既存デフォルトゲートウェイ削除
- 新規デフォルトゲートウェイ追加
を行います。
% sudo ipconfig set tap0 DHCP
# 数秒待つこと
% ifconfig tap0
tap0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether xx:xx:xx:xx:xx:xx
inet 192.168.3.10 netmask 0xffffff00 broadcast 192.168.3.255
media: autoselect
status: active
open (pid 33333)
% netstat -nr | grep -E 'default(.)*en0' | awk '{print $2}'
192.168.3.1
# GlobalIP
% route -n get sample-dns.softether.net | grep 'route to:' | awk '{print $3}'
60.xxx.xxx.xxx
% sudo /sbin/route add -net 192.168.3.1 60.xxx.xxx.xxx 255.255.255.255
add net 60.xxx.xxx.xxx: gateway 172.20.10.xxx
% sudo route -n delete default
delete net default
% sudo route add default 192.168.3.1
add net default: gateway 192.168.3.1
% netstat -nr
Routing tables
Internet:
Destination Gateway Flags Netif Expire
default 192.168.3.1 UGSc tap0
default 192.168.3.1 UGScI tap0
60.xxx.xxx.xxx/32 172.99.xx.xx UGSc en0
# ↓ローカルPCのIP
192.168.3.10/32 link#18 UCS tap0 !
上記が完了すると、ラズパイ本体にSSH等して作業可能になります。
IPが変わったのでVPN接続できていることが確認できますね
2. VPN切断
接続と逆の手順で切断を行います。
% pwd
/usr/local/vpnclient
% sudo ./vpncmd
### 略 ###
1. Management of VPN Server or VPN Bridge
2. Management of VPN Client
3. Use of VPN Tools (certificate creation and Network Traffic Speed Test Tool)
Select 1, 2 or 3: 2
接続先の VPN Client が動作しているコンピュータの IP アドレスまたはホスト名を指定してください。
何も入力せずに Enter を押すと、localhost (このコンピュータ) に接続します。
接続先のホスト名または IP アドレス: localhost
VPN Client "localhost" に接続しました。
VPN Client>AccountDisConnect AC_SAMPLE
AccountDisconnect コマンド - 接続中の接続設定の切断
コマンドは正常に終了しました。
以降は、
- vpnclient停止
- 新規デフォルトゲートウェイ削除
- 既存(旧)デフォルトゲートウェイ追加
% pwd
/usr/local/vpnclient
% sudo ./vpnclient stop
Stopping the SoftEther VPN Client service ...
SoftEther VPN Client service has been stopped.
# GlobalIP
% route -n get sample-dns.softether.net | grep 'route to:' | awk '{print $3}'
60.xxx.xxx.xxx
% netstat -nr | grep -E "60.xxx.xxx.xxx(.)*en0" | awk '{print $2}'
172.20.10.xxx
% sudo /sbin/route -n delete -net 60.xxx.xxx.xxx 172.20.10.xxx 255.255.255.255
delete net 60.xxx.xxx.xxx: gateway 172.20.10.xxx
% sudo route add default
add net default: gateway 172.20.10.xxx
おまけ
sleep
は適宜長めにとるのもありですね!
vpn_set.sh
#!/bin/sh -e
VPNPATH=/usr/local/vpnclient
VPNCLIENT=${VPNPATH}/vpnclient
VPNCMD=${VPNPATH}/vpncmd
SERVER="`route -n get sample-dns.softether.net | grep 'route to:' | awk '{print $3}'`"
NEW_DEFROUTE="192.168.3.1"
NET_MASK="255.255.255.255"
VPNNAME="AC_SAMPLE"
VPNUP=`ps -ef | grep vpnclient | grep -v grep | wc -l`
case "$1" in
start)
if [ $VPNUP = 0 ]; then
sudo -S ${VPNCLIENT} start
sudo ${VPNCMD} << EOF
2
localhost
AccountConnect ${VPNNAME}
AccountStatusGet ${VPNNAME}
EOF
# DHCPによるIPアドレスの取得
sudo ipconfig set tap0 DHCP
sleep 3
CURRENT_DEFROUTE=`netstat -nr | grep -E 'default(.)*en0' | awk '{print $2}'`
# 静的ルーティング追加
sudo /sbin/route add -net $SERVER $CURRENT_DEFROUTE $NET_MASK
# 既存デフォルトゲートウェイ削除
sudo route -n delete default
sleep 10
sudo route add default $NEW_DEFROUTE
else
echo "VPN Client has already started."
exit 1
fi
;;
stop)
if [ $VPNUP = 0 ]; then
echo "VPN client has already stoped."
exit 1
else
${VPNCMD} << EOF
2
localhost
AccountDisconnect ${VPNNAME}
AccountStatusGet ${VPNNAME}
EOF
sudo -S ${VPNCLIENT} stop
sleep 1
NEW_DEFROUTE=`netstat -nr | grep -E "${SERVER}(.)*en0" | awk '{print $2}'`
sudo /sbin/route -n delete -net $SERVER $NEW_DEFROUTE $NET_MASK
sleep 1
sudo route add default $NEW_DEFROUTE
fi
;;
restart)
$0 stop
sleep 3
$0 start
;;
*)
echo "Usage: vpn.sh {start|stop|restart}"
exit 1
;;
esac
感想
tap0
に動的IPが振られない状態(APIPA)になり数週間悩みました。
だれかの助けになって最速で構築できることを願います!!!
今後もラズパイシリーズとして続けて行けていきます
(k8sとかやってみたい...)