OpenVPNをコマンドからフォアグラウンドで実行します。
いきなり、OpenVPNをインストールして接続してしまうと、内部がブラックボックスでトラブル時に時間を浪費することになりそう
なので、まずは最低限のシンプルな状態で接続してみます。
コマンドから、OpenVPNサーバーとクライアントをそれぞれ起動して接続します。
参考資料
おもに、Debian Wiki の内容をそのまま辿っています。 https://wiki.debian.org/OpenVPN
実験環境
takuya@openvpn$ sw_vers ProductName: Mac OS X ProductVersion: 10.13.6 BuildVersion: 17G6030
OpenVPNサーバー側
takuya@:~$ cat /etc/debian_version 9.11
これらのクライアント・サーバーで、ローカルtoローカルで接続してみます。
OpenVPNのインストール
サーバー側
sudo apt install openvpn
クライアント側
brew install openvpn
コマンドから接続
OpenVPNをコマンドから起動して接続する
OpenVPNを直接起動して使って少しづつ慣れていきたいと思います。 単純にサーバー側とクライアント側でコマンドを叩いて接続します。
まずはじめに、OpenVPNを体験します。
サーバー側のOpenVPN起動
sudo openvpn --dev tun1 --ifconfig 10.9.8.1 10.9.8.2
クライアント側のOpenVPNを起動
sudo openvpn --remote 192.168.1.1 --dev tun1 --ifconfig 10.9.8.2 10.9.8.1
これで繋がります。
ほんとうに楽ちんに繋がります。暗号化や認証やルーティングを全く考慮しなければOpenVPNのコマンドはとてもシンプルです。
これでお互いの端末に vpn 経由で ping が通ります。
接続形態
LAN内部で接続しています。
LAN内部で接続しています。OpenVPNで接続します。 Server ( 192.168.1.1 ) -------<ethernet>--------- クライアント側 ( 192.168.1.100 ) 10.9.8.1 -------<openvpn> -------- ( 10.9.8.2 )
実際の接続のログ
サーバー側の接続例
takuya@:~$ sudo openvpn --dev tun1 --ifconfig 10.9.8.1 10.9.8.2 (略 Tue Feb 18 02:42:06 2020 disabling NCP mode (--ncp-disable) because not in P2MP client or server mode Tue Feb 18 02:42:06 2020 ******* WARNING *******: All encryption and authentication features disabled -- All data will be tunnelled as clear text and will not be protected against man-in-the-middle changes. PLEASE DO RECONSIDER THIS CONFIGURATION! Tue Feb 18 02:42:06 2020 TUN/TAP device tun1 opened Tue Feb 18 02:42:26 2020 WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this Tue Feb 18 02:42:26 2020 Initialization Sequence Completed
サーバー側では暗号化や認証を全く考慮していないので警告が出ています。がここではわかった上でやっているので、スルーしておきます。
クライアント側の接続例
takuya@~$ sudo openvpn --remote 192.168.1.1 --dev tun1 --ifconfig 10.9.8.2 10.9.8.1 ## 略 Fri Feb 14 09:03:02 2020 UDP link local (bound): [AF_INET][undef]:1194 Fri Feb 14 09:03:02 2020 UDP link remote: [AF_INET]192.168.1.1:1194 Fri Feb 14 09:03:12 2020 Peer Connection Initiated with [AF_INET]192.168.1.1:1194 Fri Feb 14 09:03:13 2020 WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this ## コンプリートが出るまで暫く待つ Fri Feb 14 09:03:13 2020 Initialization Sequence Completed
クライアント側がら接続して、接続が確立するまでに10秒ほどかかかりました。
接続完了後
サーバー側のtun1(クライアント接続後 root@ubuntu:~# ip addr s tun1
21: tun1: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100 link/none inet 10.9.8.1 peer 10.9.8.2/32 scope global tun1 valid_lft forever preferred_lft forever
クライアント側のtun1 ( サーバーへ接続後
takuya@~$ ip addr show utun2 utun2: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500 inet 10.9.8.2 --> 10.9.8.1/32 utun2
mac なので tun1 で指定しても utun2 ですが、そのへんは気にしないでください。
接続だけなら本当にかんたん、接続するだけならね。
念のため、ほんとうにOpenVPNを経由して通信しているか、tcpdump や route を見ておきます。 *1
サーバー側
ip route get 10.9.8.2 sudo tcpdump -i tun1 icmp
クライアント側
ip route get 10.9.8.1 sudo tcpdump -i tun1 icmp
こうしてパケットを見る方法をあわせて覚えておきます。
疎通確認 / ping
ここまでで、ping を打てます。
ping ( クライアント→サーバー)
takuya@openvpn$ ping 10.9.8.1 PING 10.9.8.1 (10.9.8.1): 56 data bytes 64 bytes from 10.9.8.1: icmp_seq=0 ttl=64 time=1.606 ms 64 bytes from 10.9.8.1: icmp_seq=1 ttl=64 time=1.939 ms 64 bytes from 10.9.8.1: icmp_seq=2 ttl=64 time=1.825 ms ^C
ping ( サーバー → クライアント )
root@:~# ping 10.9.8.2 PING 10.9.8.2 (10.9.8.2): 56 data bytes 64 bytes from 10.9.8.2: seq=0 ttl=64 time=1.813 ms 64 bytes from 10.9.8.2: seq=1 ttl=64 time=2.356 ms 64 bytes from 10.9.8.2: seq=2 ttl=64 time=2.238 ms
無事に通信ができることがわかります。
シンプルな起動を覚えた
openvpn コマンドを使って、「シンプル」に接続し、接続するとどうなるかちゃんと見ることが出来ました。
今回はNATを使った通信や、サーバー側のネットワークとルーティングを使った疎通などはしてません。
ただ。OpenVPNのサーバーとクライアントの間で通信ができることはわかります。
また、なんの認証もしてません。誰でも接続可能です。
また、なにも暗号化もしてもしてません。
そのために接続を安全に使うために、いくつかの設定を検討してアレンジしておく必要があります。
そのために知っておく必要があることがいっぱいあります。。。
まとめ
今回は、openvpn のサーバーとクライアントを起動して接続する方法を覚えました。
サーバー
openvpn --dev tun --ifconfig 10.9.8.1 10.9.8.2
クライアント
openvpn --remote 192.168.1.1 --dev tun --ifconfig 10.9.8.2 10.9.8.1
今回つかった接続はトンネルtun で、 ifconfig はpeer to peer 接続のために、ifconfig 自分のIP 相手のIP
として設定しています。
サーバとクライアントの起動の仕分けは --remote があるなしで明確にわかります。
続く
接続ができたので、次は、共通鍵(パスワードではなく鍵ファイル)を使った「認証」を試してみたいと思います。