とあるサーバーに固定IPで接続する必要がありまして、VPN接続を設定したのでメモ.
今回はInterlinkのMyIPというサービスを使いました.
なかなか固定IPのサービスは高価なので、安価に固定IPを使用したいときは良いかもですね.
接続はWindowsやMac, RedHat系Linuxなら公式ページに接続方法が紹介されていますが、 Debian系Linuxの設定例はありませんでした.
Ubuntu では NetworkManager からの設定でPPTPの設定ができないため、設定ファイルとスクリプトを駆使してPPTP接続を行う必要があります.
公式ページの手順(RHEL/CentOS系)とはずいぶん異なる感じなので注意.
(※ 16.04, 18.04, 20.04 の 各LTSバージョンで動作することを確認しました.)
1.PPTPの接続設定
Step1. PPTPクライアントをインストールする
まずはPPTPクライアントをインストールします.
これでpppなど依存パッケージもまとめてインストールされます.
$ sudo apt install pptp-linux
Step2. PPTP設定ファイルを作る
PPTP接続のための設定ファイルを配置します.
下記のコマンドを実行すると、設定ファイルの雛形を作って配置することができます.
$ sudo pptpsetup --create {接続名} --server {PPTPサーバのホスト名orIPアドレス} --username {ユーザ名} --password {パスワード} --encrypt
コマンド実行するとpeers以下に設定ファイルが作られ、chap-secrets が更新されます.
(1) peers設定ファイル
このファイルは内容だけを確認すればOKです.
特に修正する必要はありません.
/etc/ppp/peers/{接続名}
# written by pptpsetup pty "pptp {サーバホスト名orIPアドレス} --nolaunchpppd" lock noauth nobsdcomp nodeflate name {ユーザ名} remotename {接続名} ipparam {接続名} require-mppe-128
(2) chap-secrets の編集
次に、/etc/ppp/chap-secrets を編集します.
ファイルに接続先とユーザ名/Passwordと割当IPの設定が追記されているので、こちらを編集します.
pptpsetup が生成した設定ではPPTP接続時の割当IPアドレスの部分が * になっていますが、 固定IPが割り当てられる場合は、ここに割り当てられているIPを入力します.
# Secrets for authentication using CHAP # client server secret IP addresses # added by pptpsetup for HogeHoge {ユーザ名} {接続名} {パスワード} {PPTP接続時の割当IPアドレス}
Step3. ルーティングテーブルの書き換えスクリプトの準備
接続時に使用するルーティング変更処理を接続時スクリプト(ip-up, ip-down)として配置します.
内容は以下のような感じです.
(1) ip-up.local
/etc/ppp/ip-up.local (※なければ作る. filemode=0700)
#!/bin/sh # 全ての接続をVPN経由にする場合はこちら route add default gw {PPTP接続時の割当IPアドレス} # 特定ホストのみをVPN経由でアクセスしたいような場合は下記の設定を追加. # route add -net {VPN経由で接続するホスト名orIPアドレス} netmask 255.255.255.255 gw {PPTP接続時の割当IPアドレス} exit 0
(2) ip-down.local
/etc/ppp/ip-down.local (※なければ作る. filemode=0700)
#!/bin/sh route del default gw {PPTP接続時の割当IPアドレス} # 特定ホストのみVPN経由アクセスとしていた設定を削除 # route del -net {VPN経由で接続するホスト名orIPアドレス} netmask 255.255.255.255 gw {PPTP接続時の割当IPアドレス} exit 0
Step4. 接続/切断スクリプトの準備
PPTPの接続と切断を行うスクリプトを作ります.
これはユーザが直接叩くので、作成・配置場所はお好みの場所でOKです.
(1) 接続スクリプト
ここではファイル名を startpptp.shとしました (※ filemode=0755)
#!/bin/sh echo "Starging PPTP to {接続名}" sudo pppd call {接続名} updetach # デフォルトのルーティングを削除 sudo route del default gw {ルータのホスト名orIPアドレス} echo "Connected!!" exit 0
(2) 切断スクリプト
ここではファイル名を stoppptp.shとしました (※ filemode=0755)
#!/bin/sh echo "Stopping PPTP to Interlink(XXXXXXXX)" # pppdの停止 sudo pkill -TERM pppd # デフォルトルーティングの復元 sudo route add default gw {ルータのIP} # pppdによって追加されたPPTPサーバ接続のルーティングを削除 sudo route del -net {VPNサーバのホスト名orIPアドレス} netmask 255.255.255.255 gw {ルータのホスト名orIPアドレス} echo "Disconnected." exit 0
2.接続と切断
2-1. PPTPで接続する
$ ./startpptp.sh
ifconfig コマンドで ネットワークアドレスを確認します.
ppp0が追加されていれば接続成功です.
2-2. PPTPを切断する
$ ./stoppptp.sh
3. その他
起動時に自動的に接続するとかの場合は、NetworkManagerではなく、networkのinterface設定でpre-up/post-downなどを使うと行うと良いらしいです.