ラズパイ4を購入したが、その使い道としてはシンクライアントが妥当だろうと考えた。
私の会社はテレワークがパーマネントになったので、社内にある自分のWindowsマシンにラズパイ4からリモデ接続して仕事ができるようにしようと言うことである。
環境
- Raspberry Pi 4B (8GB RAM)
- Raspbian GNU/Linux 10 (buster)
インストールしたもの
- ike-scan 1.9.4-2
- StrongSwan 5.7.2-1
- xl2tpd 1.3.12-1.1
- Remmina 1.3.3
VPN設定
必要なパッケージをインストール
$ sudo apt install ike-scan strongswan xl2tpd
StrongSwan (ipsec) の設定
先ずは接続先(a.b.c.d:VPNサーバー)の暗号化方式を調べる。
$ sudo systemctl stop ipsec xl2tpd
$ sudo ike-scan a.b.c.d
Starting ike-scan 1.9.4 with 1 hosts (http://www.nta-monitor.com/tools/ike-scan/)
a.b.c.d Main Mode Handshake returned HDR=(CKY-R=***) SA=(Enc=3DES Hash=SHA1 Auth=PSK Group=2:modp1024 LifeType=Seconds LifeDuration(4)=0x00007080) VID=*** (KAME/racoon)
Ending ike-scan 1.9.4: 1 hosts scanned in 0.082 seconds (12.26 hosts/sec). 1 returned handshake; 0 returned notify
取得したSAの内容(3DES/SHA1/PSK/modp1024)にしたがって、ipsecの設定を行う。
$ sudo vim /etc/ipsec.conf
conn %default
keyingtries=0
conn myvpn
keyexchange=ikev1
authby=secret
right=a.b.c.d
rightid=e.f.g.h
ike=3des-sha1-modp1024!
esp=3des-sha1
leftfirewall=yes
auto=add
left=%defaultroute
leftprotoport=17/1701
rightprotoport=17/1701
type=transport
参照:https://wiki.strongswan.org/projects/strongswan/wiki/ConnSection
上記myvpnには好きな名前を付ける。
PSK(Pre Shared Key)なので上記authbyにはsecretを指定する。
上記rightidはそれが未定義のときに以下のメッセージが下記接続確認時に出力された場合に記述する。
IDir 'e.f.g.h' does not match to 'a.b.c.d'
また、下記の通り、PSKを設定する。
$ sudo vim /etc/ipsec.secrets
a.b.c.d : PSK "PSKの値"
一旦、ipsec接続が可能かを確認する。
成功すると、以下のようなメッセージが表示される。
$ sudo systemctl start ipsec
$ sudo ipsec up myvpn
...
connection 'myvpn' established successfully
$ sudo ipsec status
Security Associations (1 up, 0 connecting):
myvpn[1]: ESTABLISHED 41 seconds ago, i.j.k.l[i.j.k.l]...a.b.c.d[e.f.g.h]
myvpn{1}: INSTALLED, TRANSPORT, reqid 1, ESP in UDP SPIs: xxxxxxxx_i xxxxxxxx_o
myvpn{1}: i.j.k.l/32[udp/l2f] === a.b.c.d/32[udp/l2f]
$ sudo ipsec down myvpn
上記i.j.k.lはラズパイ4側のIPアドレスである。
xl2tpdの設定
以下のようにxl2tpdの設定を行う。
$ sudo vim /etc/xl2tpd/xl2tpd.conf
[lac myvpn]
lns = a.b.c.d
pppoptfile = /etc/ppp/options.l2tpd.client
length bit = yes
autodial = no
redial = yes
redial timeout = 10
max redials = 6
参照:https://linux.die.net/man/5/xl2tpd.conf
以下のようにPPP(Point-to-Point Protocol)の設定を行う。
$ sudo vim /etc/ppp/options.l2tpd.client
name DOMAIN\\USER
password PASSWORD
noauth
上記DOMAIN、USER、PASSWORDはそれぞれ自分のアカウントに合わせる。
他のサイトを参照すると、name、password、noauth以外にも多くの設定項目が存在するが、削っていったところ、最小の設定で接続できた。
ここでVPN接続が可能かを確認する。
成功すると、以下のようなログが/var/log/syslogに出力され、ネットワークインターフェースとしてppp0が追加される。
$ sudo systemctl start xl2tpd
$ sudo up myvpn
$ sudo xl2tpd-control connect myvpn
$ less /var/log/syslog
...
www dd hh:mm:ss raspberrypi ipsec[2601]: 07[KNL] interface ppp0 activated
...
$ ifconfig ppp0
ppp0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1400
inet l.m.n.o netmask 255.255.255.255 destination p.q.r.s
ppp txqueuelen 3 (Point-to-Pointプロトコル)
RX packets 89 bytes 14054 (13.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 326 bytes 39274 (38.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ルート設定
現時点では、ルートが通っていないので、まだ社内にアクセスできない。
$ route
カーネルIP経路テーブル
受信先サイト ゲートウェイ ネットマスク フラグ Metric Ref 使用数 インタフェース
default xxxxxxxx 0.0.0.0 UG 303 0 0 wlan0
p.q.r.s 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
t.u.v.0 0.0.0.0 255.255.255.0 U 303 0 0 wlan0
上記p.q.r.sをもとに、ルートを追加する。
$ sudo ip route add p.q.0.0/16 via p.q.r.s dev ppp0
$ route
カーネルIP経路テーブル
受信先サイト ゲートウェイ ネットマスク フラグ Metric Ref 使用数 インタフェース
default xxxxxxxx 0.0.0.0 UG 303 0 0 wlan0
p.q.0.0 p.q.r.s 255.255.0.0 UG 0 0 0 ppp0
p.q.r.s 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
t.u.v.0 0.0.0.0 255.255.255.0 U 303 0 0 wlan0
これで社内のマシンにPINGが通るようになるはず。
xl2tpdによるppp0の追加と同時にルートを追加するには、以下のシェルスクリプトを作成する。
$ sudo vim /etc/ppp/ip-up.d/0001myvpn
# !/bin/sh -e
dev=$1
gw=$5
if [ `echo $dev | grep ppp` ]; then
mask=`echo $gw | sed 's/\([0-9]\+\)\.\([0-9]\+\)\.[0-9]\+\.[0-9]\+/\1.\2.0.0/'`
ip route add $mask/16 via $gw dev $dev
fi
exit 0
上記シェルスクリプトには実行属性を追加しておく必要がある。
$ sudo chmod +x /etc/ppp/ip-up.d/0001myvpn
その他
好きな名前のシェルスクリプトを作成し、VPN接続と切断を行えるようにしておくと良い。
# !/bin/sh
ipsec up myvpn
while true
do
stat=`ipsec status | grep INSTALLED`
if [ "$stat" != "" ]; then
xl2tpd-control connect myvpn
exit
fi
sleep 1
done
# !/bin/sh
xl2tpd-control disconnect myvpn
ipsec down myvpn
上記いずれも chmod +x で実行属性を付ける必要がある。
リモデ設定
必要なパッケージをインストール
$ sudo apt install remmina reminna-plugin-rdp
Remminaの設定
- Application menu>インターネット>Remminaで起動
- Remmina>左上のcreate a new connection profileをクリック
- 名前は適宜、グループは任意で入力、プロトコルはRDPを選択
- サーバー、ユーザー名、User passwordを入力
- 他の項目は適宜設定し、Saveボタンをクリック
- Remminaのメイン画面のリストに追加されたプロファイルをダブルクリックで接続
所感
残念ながら、VPN上の通信は遅くてリモデが使い物にならなかった。
多段階SSH接続でリモデ接続ポートを通した方が圧倒的に速かった。
しかし、多段階SSH接続の最初の一歩として、社内のLinuxマシンにSSH接続する分には使えるので、それはそれとして良かった点である。