ま、そんなところで。

ニッチな技術系メモとか、車輪を再発明してみたりとか.

UbuntuでPPTPクライアントをセットアップする

とあるサーバーに固定IPで接続する必要がありまして、VPN接続を設定したのでメモ.

今回はInterlinkのMyIPというサービスを使いました.
なかなか固定IPのサービスは高価なので、安価に固定IPを使用したいときは良いかもですね.

接続はWindowsMac, RedHatLinuxなら公式ページに接続方法が紹介されていますが、 DebianLinuxの設定例はありませんでした.

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
f:id:zervoid:20200506090202p:plain

ifconfig コマンドで ネットワークアドレスを確認します.
ppp0が追加されていれば接続成功です.

f:id:zervoid:20200506085159p:plain

2-2. PPTPを切断する

$ ./stoppptp.sh

3. その他

起動時に自動的に接続するとかの場合は、NetworkManagerではなく、networkのinterface設定でpre-up/post-downなどを使うと行うと良いらしいです.

参考サイト