それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

OpenVPNコマンドで直接起動して接続される状態を体験する。

OpenVPNをコマンドからフォアグラウンドで実行します。

いきなり、OpenVPNをインストールして接続してしまうと、内部がブラックボックスでトラブル時に時間を浪費することになりそう

なので、まずは最低限のシンプルな状態で接続してみます。

コマンドから、OpenVPNサーバーとクライアントをそれぞれ起動して接続します。

参考資料

おもに、Debian Wiki の内容をそのまま辿っています。 https://wiki.debian.org/OpenVPN

実験環境

OpenVPNクライアント macOS

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 があるなしで明確にわかります。

続く

接続ができたので、次は、共通鍵(パスワードではなく鍵ファイル)を使った「認証」を試してみたいと思います。

*1:ローカルLAN内の接続ではip_forwardingでパケットが別経由で流れる可能性もあります、例えばゲートウェイとして使っているforwardingが有効なサーバーでvpn試すと意図通りの経路を通らなくても疎通しちゃうかもしれません、ルーティングテーブルやIPアドレスの範囲など設定によっては疎通できてしまいます。