パブリッククラウド上にプライベートなサービスを乗せる際など、拠点間VPNを張りたい場合、VyOSを使えば簡単にVPNルーターを構築できるのでご紹介。今回はさくらのクラウドで構築しました。ネットワークは以下の通り。
■ ログイン
インスタンスができたばかりの状態はSSH接続ができないので、コンソールからログインします。
ユーザー名: vyos
パスワード: インスタンス作成時に決めたもの
■ NIC追加
10.0.0.0/8側に足が伸びるネットワークはeth1となります。(インスタンスができた後、予めNICを追加しておいてください)。NICを追加した後はIPアドレスが振られていないので、コンソールからログインして、以下のコマンドでeth1のインターフェイスにIPアドレスを追加します。
$ configure # set interface ethernet eth1 address 10.0.0.10/8 # commit # save
■ SSH設定
VyOSは初期状態でSSH接続を受け付けないので、以下のコマンドでSSH接続を受け付ける設定をします。
# set service ssh # commit # save
■ NAT設定
10.0.0.0/8なアドレスからeth0を経由してインターネットへ出る際にNAT(SNAT)できるようにします。
# set nat source rule 999 outbound-interface eth0 # set nat source rule 999 translation address masquerade # commit # save
■ VPN(PPTP)設定
PPTPでVPN接続を受け付ける際に決めるパラメーターは以下の通りです。
VPN接続を待ち受けるIPアドレス: 133.242.xxx.xxx (VyOSのグローバルIPアドレス)
VPNクライアントに付与するIPアドレス: 10.0.0.100〜10.0.0.199
DNSサーバーのIPアドレス: 133.242.0.3 (さくらのクラウド DNSサーバー)
VPNクライアントのユーザー名: nullpopopo
VPNユーザー nullpopopo のパスワード: P@sSW0rD
# set vpn pptp remote-access outside-address 133.242.xxx.xxx # set vpn pptp remote-access client-ip-pool start 10.0.0.100 # set vpn pptp remote-access client-ip-pool stop 10.0.0.199 # set vpn pptp remote-access dns-servers server-1 133.242.0.3 # set vpn pptp remote-access authentication local-users username nullpopopo # set vpn pptp remote-access authentication local-users username nullpopopo password P@sSw0rD # set vpn pptp remote-access authentication mode local # commit # save
VyOSの設定は以上です。
■ クライアントからのコマンドラインを用いた接続とルーティング設定
VyOSはeth1のアドレスとは別にゲートウェイとなるアドレスをPPTPクライアントに配るようなので、これを確認してから設定します。以下、クライアント(Fedora20)でのコマンドです。
現在のルーティングを確認する
$ ip r default via 192.168.0.254 dev p2p1 proto static metric 1024 192.168.0.0/24 dev p2p1 proto kernel scope link src 192.168.0.134
デフォルトゲートウェイは自宅のブロードバンドルーター (192.168.0.254) に向いています。
対向ルーターの登録を行う
登録名: SAKURA
vyattaサーバーのグローバルIPアドレス: 133.242.xxx.xxx
ユーザー名: nullpopopo
パスワード: P@sSw0rD
$ sudo pptpsetup --create "SAKURA" --server "133.242.xxx.xxx" --username "nullpopopo" --password "P@sSw0rD" --encrypt
対向ルーターに接続する
$ sudo pppd call SAKURA updetach Using interface ppp0 Connect: ppp0 <--> /dev/pts/1 CHAP authentication succeeded MPPE 128-bit stateless compression enabled local IP address 10.0.0.100 remote IP address 10.255.254.0
このように、pppdコマンドでの接続に成功すると、ppp0というインターフェイスができ、local IPに10.0.0.100が振られ、remote IP (対向ルーターのIPアドレス) は10.255.254.0であると広報されます。もしこれを見逃しても、対向ルーターのIPアドレスはipコマンドで確認することができます。
対向ルーターのIPアドレスを取得する
ipコマンドを使ってppp0インターフェイスを確認します。
$ ip a show dev ppp0
対向ルーターのIPアドレスを取得する(IPアドレスのみ表示させるシェル芸)
$ ip a show dev ppp0 | grep inet | awk '{print $4}' | sed -e 's/\/[0-9]*//g'
ルーティング設定
デフォルトゲートウェイを対向ルーターのIPアドレスに設定する
$ sudo ip route add default via $(ip a show dev ppp0 | grep inet | awk '{print $4}' | sed -e 's/\/[0-9]*//g')
インターネットへのルーティングをppp0に設定する
$ sudo ip route add 0.0.0.0 dev ppp0
既存のデフォルトゲートウェイを削除する
$ sudo ip route del default via 192.168.0.254
ルーティングの設定は上記の順番で行ってください。そして、以下のようなルーティングテーブルが表示されていることを確認します。
$ ip r 0.0.0.0 dev ppp0 scope link default via 10.255.254.0 dev ppp0 10.255.254.0 dev ppp0 proto kernel scope link src 10.0.0.100 133.242.xxx.xxx via 192.168.0.254 dev p2p1 src 192.168.0.134 192.168.0.0/24 dev p2p1 proto kernel scope link src 192.168.0.134
Google Public DNSというIaaS(ICMP as a Service)への経路をtracerouteコマンドで表示して、1hop目が対向ルーターのIPアドレスになっていることを確認します。
$ traceroute -n 8.8.4.4 traceroute to 8.8.4.4 (8.8.4.4), 30 hops max, 60 byte packets 1 10.255.254.0 20.942 ms 20.930 ms 20.932 ms 2 153.120.25.2 20.933 ms 27.525 ms 27.809 ms 3 103.10.113.25 27.427 ms 27.443 ms 27.345 ms 4 103.10.113.93 27.854 ms 103.10.113.17 27.806 ms 27.760 ms 5 103.10.113.117 33.341 ms 103.10.113.69 27.819 ms 103.10.113.61 36.780 ms 6 157.17.131.241 39.973 ms 157.17.131.1 36.379 ms 157.17.131.5 36.312 ms 7 157.17.130.45 38.299 ms 59.106.247.117 36.460 ms 210.171.224.96 37.313 ms 8 210.171.224.96 36.956 ms 216.239.47.91 37.364 ms 210.171.224.96 36.683 ms 9 72.14.239.165 37.352 ms 216.239.47.91 40.165 ms 216.239.47.89 39.530 ms 10 72.14.239.165 36.579 ms 209.85.254.205 39.522 ms 209.85.143.31 36.891 ms 11 8.8.4.4 39.827 ms 38.828 ms 36.679 ms
VPN切断
ここまで確認できたところで、VPN接続を切断します。
$ sudo pkill -f "pppd call SAKURA updetach"
さらに、ルーティングが元に戻っていることを確認します(対向ルーターのアドレスが残っているぶんには構いません)。
$ ip r default via 192.168.0.254 dev p2p1 proto static metric 1024 133.242.xxx.xxx via 192.168.0.254 dev p2p1 src 192.168.0.134 192.168.0.0/24 dev p2p1 proto kernel scope link src 192.168.0.134
tracerouteでインターネットへの接続を確認します。1hop目がブロードバンドルーターのアドレスになっていればOKです。
$ traceroute -n 8.8.4.4 traceroute to 8.8.4.4 (8.8.4.4), 30 hops max, 60 byte packets 1 192.168.0.254 16.888 ms 16.685 ms 29.777 ms 2 * * * (略)
いかがでしたでしょうか?VyOSを使うと簡単にVPNを構築することができます。iPhoneやアンドロイドからも繋がることを確認してみると面白いでしょう。
[amazonjs asin="4774165530" locale="JP" title="Vyatta仮想ルータ活用ガイド (Software Design plus)"]