Sep 7th, 2013

さくらのVPSでVyattaを使ったVPNトンネルの構築

最近スタバなどでのフリーWifiを使う事が多くなり、ちょっとセキュリティ的な面でストレスを貯めていたのですが、そうだVyattaがあるじゃないかって事で構築したので、その備忘録的なPostです。

構築するにあたり以下のblogを参考にしました。
さくらのクラウドで月1900円の固定IP環境を構築する(L2TP/IPSec編)

Vyatta インストール

イメージ準備

まずインストールしないことには始まらないので、ここからVC6.6R1 LiveCDを落としてきます。 さくらのVPSのコントロールパネルから「OS再インストール」→「ISOイメージインストール」へと進み、アカウントを作成してSFTPでアップロードします。 アップロードしたイメージは24時間有効なので、その間にインストールしないといけませんが、このサービスのおかげでVyattaのような特殊なOSもインストールすることが出来ます。

注意点としてデフォルトのCentOSではGPTを使ってインストールされているので、そのままではインストール出来ないようです。インストールするためにはMBRに変更しないといけないようなのですが、自分は事前にDebianをインストールしていたこともあり、この点はハマる事なく進めました。

インストール

OSを立ち上げると以下のような画面になりますので、ログインユーザ、パスワードともに vyatta と入力します。

Vyatta

ログインが成功したらvyattaをDiskに以下のようにしてインストールします。

install system

この後は簡単な質問が出てくるのですが特に迷う事は無いと思います。 質問の内容だけですが以下のような感じです。ディスクを削除することに同意するために yes と入力する箇所をvyattaユーザのパスワード以外はすべて Enter で問題ありませんでした。

Would you like to continue? (Yes/No) [Yes]:
Partition (Auto/Union/Parted/Skip) [Auto]:

Install the image on? [sda]:

This will destroy all data on /dev/sda.
Continue  (Yes/No) [No]: Yes

/dev/sda1 has SSH host keys
Would you like me to keep SSH keys on new install? (Yes/No) [Yes]:
How big of root partition should I create? (1000MB - 21474MB) [21474] MB:
Which one should I copy to sda ? [/opt/vyatta/etc/config/config.boot]:
Enter password for administrator account
Enter password for user 'vyatta':
Retype password for user 'vyatta':
Which drive should GRUB modify the boot partition on ? [sda]:

インストールが終わったら一度電源を落とす必要があるので、以下のようにします。

sudo poweroff

これでさくらのVPSのコントロールパネルに戻りOSを起動します。OSを起動してもSSHはまだこの時点では使えないので、コントロールパネルのリモートコントロールから操作します。

Vyatta 設定

設定するにあたり必要な情報は以下の通りです。

  • さくらのVPSのIP [SAKURA VPS IP]
  • さくらのVPSのゲートウェイアドレスのIP [SAKURA VPS GATEWAY IP]
  • さくらのVPSで使うネームサーバ [SAKURA NAME SERVER IP]
  • ホスト名 [HOSTNAME]
  • 事前共有キー [SHARED SECRET]
  • ユーザネームとパスワード [USERNAME], [PASSWORD]

ちなみに vyatta の設定ではタブキーでサジェスト出来るようになっているので、途中まで入力すると後はタブキーでどんどん入力できます。

Network & NTP

まずは以下の設定を行います。

  • ネットワークの設定
  • タイムゾーン設定
  • デフォルトのNTPサーバを日本国内のNTPサーバへ変更。例では ntp.jst.mfeed.ad.jpを使っています。
  • SSHの起動
configure
set interfaces ethernet eth0 address [SAKURA VPS IP]/23
set system host-name [HOSTNAME]
set system gateway-address [SAKURA VPS GATEWAY IP]
set system name-server [SAKURA NAME SERVER IP]
set system time-zone Asia/Tokyo
delete system ntp server
set system ntp server ntp.jst.mfeed.ad.jp
set service ssh
commit
save
exit

SSH設定

SSH公開鍵はどこからでも構わないのですがここでは github に登録したものから取得します。

curl -O https://github.com/d6rkaiz.keys

vyattaに登録するためには username@hostname のような形でコメントに記載されている必要があるのですが、githubから取得したSSH公開鍵はコメントに何も登録されていないので追記します。

edit d6rkaiz.keys # append d6rkaiz@gmail.com

次に上記で取得し編集したSSH公開鍵の設定とパスワード認証をオフにします。

configure
loadkey vyatta d6rkaiz.keys
set service ssh disable-password-authentication
commit
save
exit

これで以降は端末のSSHから接続出来るようになります。

VPN L2TP & IPSEC

ここからはVPNの設定ですが、まずは ipsec で利用するネットワークの選択とNATを有効にし受け付けるネットワークアドレスを指定します。(ここではすべてとしてます)

configure
set vpn ipsec ipsec-interfaces interface eth0
set vpn ipsec nat-traversal enable
set vpn ipsec nat-networks allowed-network 0.0.0.0/0
commit
save

VPN L2TP REMOTE-ACCESS

次に L2TP のリモートアクセス部分の設定。VPNアクセス時に配布するDNSサーバアドレスはGoogleパブリックDNSを指定しています。 VPNで接続した際に配布するアドレスをここでは 192.168.110.1 から 192.168.110.100 としていますが、使ってるネットワークでバッティングしないようなアドレスであれば何でも構いません。 また最後にVPNでアクセスするユーザ認証をローカルとしユーザアカウントを設定します。ここで指定するユーザアカウントで接続することになるので、パスワードはジェネレーターなどを使うか出来るだけ長いものを設定した方が良いでしょう。

set vpn l2tp remote-access outside-address [SAKURA VPS IP]
set vpn l2tp remote-access outside-nexthop [SAKURA VPS GATEWAY IP]
set vpn l2tp remote-access client-ip-pool start 192.168.110.1
set vpn l2tp remote-access client-ip-pool stop 192.168.110.100
set vpn l2tp remote-access dns-servers server-1 8.8.8.8
set vpn l2tp remote-access dns-servers server-2 8.8.4.4
set vpn l2tp remote-access ipsec-settings authentication mode pre-shared-secret
set vpn l2tp remote-access ipsec-settings authentication pre-shared-secret [SHARED SECRET]
set vpn l2tp remote-access authentication mode local
set vpn l2tp remote-access authentication local-users username [USERNAME] password [PASSWORD]
commit
save

NAPTルール設定

set nat source rule 999 outbound-interface eth0
set nat source rule 999 translation address masquerade
commit
save
exit

以上で、サーバ側の設定は終わりです。これでスターバックスなどのフリーなWifiからでもVPNで比較的安全な接続ができ且つ固定IPアドレスでのアクセスを毎月980円で手に入れる事が出来ます。

その他

すごくどうでも良い情報ですが、このサーバを構築するにあたり翌日以降に必要だったサーバを間違って潰してしまい、一旦30分程かけて元の状態に戻した後に翌日先方に確認して別のサーバを用意して、再度Vyattaをインストールして構築しなおしたのはいい思い出になりました。

2013-09-07 21:15
スクリーンショット画像の追加もれ修正