harumaki.net

インフラ屋の覚書や、ラーメン食べある記とか。

infra network メモ

VPNサーバ構築検証(PPTP)

投稿日:2005年12月13日

Last Updated on 2022年3月13日 by かんりにん

 
[pukiwiki]

会社のWindowsVPNが不調になったので、原因を調べつつLinuxでの構築を試してみる。
サーバーはRedHat Enterprise 4系。

**構築要件 [#ob13fba1]
-WindowsPCからの接続が可能
-WindowsDCのユーザー認証を使用してテスト
社内のActive Directoryで管理しているユーザアカウントでの認証とログインのテスト
-グローバルIP割り当て
-PPTP通信の暗号化
PPTPで使用するというMPPE(Microsoft Point-to-Point Encryption) の適用
-WindowsDCのユーザー認証を使用してテスト
・プライベートIPの割り当て範囲を決める

【前提条件】
-ネットワークIFを二つ持ち、片方はグローバルIPを割り当てている。
あるいはNATで割り当ててている。
-各IFにそれぞれルーティングテーブルを設定している。

【使用するパッケージ】
-ppp
最新版にバージョンアップ
-dkms
カーネルモジュールの追加をするためのパッチ
-kernel_ppp_mppe
mppeのカーネルモジュール
-pptpd
pptpサーバ

【本家サイト】
Poptop – The PPTP Server for Linux
http://www.poptop.org/

【参考サイト】
お世話になっています!
-LinuxでPPTPを使う
http://www.komoto.org/vpn/pptp-linux.html

-LinuxでWindows用VPNサーバを立ち上げる
http://www.pluto.ai.kyutech.ac.jp/plt/matumoto/PPTP/pptp.html

**1)インストール [#sddefbcc]

カーネルモジュールとソフトウェアのインストール。
WindowsVPNの接続を許可する場合、MPPE(Microsoft Point-to-Point Encryption)への対応が
必要となる。
VPNサーバにLinuxを用いる場合、カーネルにmppeのパッチを当てるか、mppeモジュールを用意して
読み込ませてmppe対応にするかの選択肢がある。
今回はカーネルへmppeモジュールを追加する方向で作業を進める。

***PPP [#ya78fc4e]
-1-1.パッケージのビルド
–ダウンロード
# cd /usr/src/redhat/SRPMS/
# wget http://downloads.sourceforge.net/poptop/ppp-2.4.3-5.src.rpm?use_mirror=jaist
–ソースRPMの展開とビルド
# rpm -Uvh ppp-2.4.3-5.src.rpm
# cd ../SPECS/
# rpmbuild -bb ppp.spec
完了すると、/usr/src/redhat/RPMS/i386/に以下のファイルが作成される。
ppp-2.4.3-5.rhel3.i386.rpm
ppp-debuginfo-2.4.3-5.rhel3.i386.rpm
-1-2.インストール
–古いソースのバックアップ
# cd /usr/src/
# cp -pR linux-2.6.**-**.EL/ linux-2.6.**-**.EL.old
–インストール
# cd /usr/src/redhat/RPMS/i386/
# rpm -ivh –test ppp-2.4.3-5.rhel4.i386.rpm
そのままインストールしようとすると、既にインストール済みのpppとコンフリクトするので
-Uvhに変更してアップデートする。

***dkms [#r1b0ff54]

# wget http://downloads.sourceforge.net/poptop/dkms-2.0.10-1.src.rpm?modtime=1142591697&big_mirror=1
# rpm -Uvh dkms-2.0.10-1.src.rpm
# cd ../SPECS/
# rpmbuild -bb dkms.spec
完了すると、/usr/src/redhat/RPMS/noarch/dkms-2.0.10-1.noarch.rpmが作成される。
インストールはmppeモジュールと同時に行うので、次項に記載。

***mppeのkernelモジュール [#n5421ccf]
-2-1.パッケージのビルド
–ダウンロード
# pwd
/usr/src/redhat/SRPM
# wget http://downloads.sourceforge.net/poptop/kernel_ppp_mppe-1.0.2-3dkms.src.rpm?modtime=1128679004&big_mirror=1
–ソースRPMの展開とビルド
# rpm -Uvh kernel_ppp_mppe-1.0.2-3dkms.src.rpm
# cd ../SPECS/
# rpmbuild -bb kernel_ppp_mppe.spec
完了すると、/usr/src/redhat/RPMS/noarch/kernel_ppp_mppe-1.0.2-3dkms.noarch.rpmが作成される。
-2-2.dkmsとmppeモジュールをインストール
上記で作成したdkmsと同時にまとめてインストール。
# cd /usr/src/redhat/RPMS/noarch/
# rpm -ivh –test dkms-2.0.10-1.noarch.rpm kernel_ppp_mppe-1.0.2-3dkms.noarch.rpm
問題なければインストール実施。
そのままカーネルのコンパイルまで実行される。
# rpm -ivh dkms-2.0.10-1.noarch.rpm kernel_ppp_mppe-1.0.2-3dkms.noarch.rpm
Preparing… ########################################### [100%]
1:dkms ########################################### [ 50%]
2:kernel_ppp_mppe ########################################### [100%]

Creating symlink /var/lib/dkms/kernel_ppp_mppe/0.0.5/source ->
/usr/src/kernel_ppp_mppe-0.0.5

DKMS: add Completed.

Kernel preparation unnecessary for this kernel. Skipping…

Running the pre_build script:
Using /var/lib/dkms/kernel_ppp_mppe/0.0.5/source/ppp_generic/2.6.5-1.358/ppp_generic.c
applying patch linux-2.6.2-pad.patch…patching file ppp_generic.c
Hunk #1 succeeded at 1066 (offset 21 lines).
Hunk #3 succeeded at 1615 (offset 25 lines).

applying patch 02-ppp_generic.c.patch…patching file ppp_generic.c

applying patch 03-ppp_mppe_compress.c.patch…patching file ppp_mppe_compress.c

applying patch 04-ppp_mppe_compress.c_license.patch…patching file ppp_mppe_compress.c
Hunk #1 succeeded at 654 (offset 1 line).

Building module:
cleaning build area….
make KERNELRELEASE=2.6.9-42.ELsmp -C /lib/modules/2.6.9-42.ELsmp/build M=/var/lib/dkms/kernel_ppp_mppe/0.0.5/build…..

Running the post_build script:
cleaning build area….

DKMS: build Completed.
Running module version sanity check.

ppp_generic.ko:
– Original module
– Found /lib/modules/2.6.9-42.ELsmp/kernel/drivers/net//ppp_generic.ko
– Storing in /var/lib/dkms/kernel_ppp_mppe/original_module/2.6.9-42.ELsmp/i686/
– Archiving for uninstallation purposes
– Installation
– Installing to /lib/modules/2.6.9-42.ELsmp/kernel/drivers/net//

ppp_mppe.ko:
– Original module
– Installation
– Installing to /lib/modules/2.6.9-42.ELsmp/kernel/drivers/net//

depmod…….

DKMS: install Completed.
#

***pptpd [#bda9de93]
VPNサーバのデーモンとして動作するpptpdをインストール。

# cd /usr/src/redhat/SRPMS/
# wget http://downloads.sourceforge.net/poptop/pptpd-1.3.3-1.src.rpm?modtime=1157464935&big_mirror=1
# rpm -Uvh pptpd-1.3.3-1.src.rpm
# cd ../SPECS/
# rpmbuild -bb pptpd.spec
コンパイルに成功すると../RPMS/i386にパッケージが出来る。
# cd ../RPMS/i386/
# rpm -ivh –test pptpd-1.3.3-1.i386.rpm
問題なければインストール。
# rpm -ivh pptpd-1.3.3-1.i386.rpm

**2)環境設定 [#h26bf84c]

***2-1.pptpdの基本設定 [#r05f28ce]

-/etc/pptpd.conf
# cd /etc/
# vi pptpd.conf
–”[設定箇所]”
localip 192.168.1.100 ←自ホストのIPアドレス
remoteip 192.168.1.101-110 ←VPNクライアントに割り当てるIPアドレス

-/etc/ppp/options.pptpd
# cd /etc/ppp/
# vi options.pptpd
–”[設定箇所]”
18a19
> domain hogecompany.local
66,67c67,68
< #ms-dns 10.0.0.1 < #ms-dns 10.0.0.2 --- > ms-dns 192.168.1.11 ←DNSサーバの指定1
> ms-dns 192.168.1.12 ←DNSサーバの指定2
128c129
< --- > nodefaultroute

***2-2.ログインアカウントの設定 [#q854a6d9]
VPN接続に使用するユーザーアカウントを設定。
※最終的にはsambaでWindowsドメイン認証を利用したいが、テストなので一時的に設定。
設定ファイルは”/etc/ppp/chap-secrets”。
# pwd
/etc/ppp
# cp chap-secrets chap-secrets.org
# vi chap-secrets
-”[設定内容]”
接続アカウント(client)、サーバ名、パスワード(secret)、IPアドレスを設定する。
パスワードを平文で記入するのが微妙。
IPアドレスを指定しない場合は”*”とする。
指定すると、接続元を制限することができる。
# Secrets for authentication using CHAP
# client server secret IP addresses
# クライアント名 サーバ名 パスワード       接続元IP
user VPNsvr password  *

***2-3.ログ出力の設定 [#c2a2078a]
デフォルトではpptpdのログは/var/log/messagesへ出力されるが
pptpdのみのログを出力するため/etc/syslog.confへ出力設定を追加。

-/etc/syslog.conf
# vi /etc/syslog.conf
–”[設定箇所]”
daemon.debug;local2.debug /var/log/ppp/pptpd.log
-/etc/logrotate.d/ppp
# vi /etc/logrotate.d/ppp
–”[設定箇所]”
# Logrotate file for ppp RPM

/var/log/ppp/pptpd.log
/var/log/ppp/connect-errors {
missingok
compress
notifempty
daily
rotate 5
create 0600 root root
}

***2-4.IPフォワードの設定 [#r8157cfc]

デフォルトではパケット転送設定が有効になっていないので
これを有効にしておく。

-事前に設定情報を確認
# cat /proc/sys/net/ipv4/ip_forward
0
無効になっているので、有効にする
# echo 1 > /proc/sys/net/ipv4/ip_forward
# cat /proc/sys/net/ipv4/ip_forward
1
このままでは再起動時に設定が無効に戻るので
sysctl.confにも追記しておく。
# vi /etc/sysctl.conf
–”[変更箇所]”
7c7,8
< net.ipv4.ip_forward = 0 --- > #net.ipv4.ip_forward = 0
> net.ipv4.ip_forward = 1

***2-5.自動起動設定 [#n63c802d]
デーモンの起動は/etc/init.d/pptpdから可能。
ついでにOSリブート時に自動起動するようchkconfigで設定。
# chkconfig pptpd on

**3)動作検証 [#yba58c7e]

自宅からLinuxVPNサーバのグローバルIPへWindowsVPNを設定してログイン。
-vpnログイン:成功
-ipconfig確認
VPNログイン後、ローカルPCにてipconfigを実行。
通常のコンフィグのほか、PPPの設定が表示されることを確認。
PPP adapter hogenetwork1:

Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : 192.168.1.101
Subnet Mask . . . . . . . . . . . : 255.255.255.255
Default Gateway . . . . . . . . . : 192.168.1.100
-ping確認
LAN内のホストへping疎通を確認→成功
-DNS解決
nslookupで社内ホストのIPアドレスをリクエスト→失敗
-リモートデスクトップ
ホスト名(FQDN)でのアクセス→失敗
IPアドレス指定でのアクセス→成功

**4)課題 [#d091b2b1]

社外(WAN)からのVPNアクセスは成功したが、現在利用できるのは
IPアドレス指定でも利用できるサービスのみ(リモートデスクトップも同様)。
実運用にフェーズをあげるにあたって、以下の設定の検証が必要。

-セキュリティ強化
-外部からのアクセス制限
iptablesなどで制限。
-接続元を制限する
chaps-secretで設定
パスワードをハッシュ化して記載しておけば尚グッド。
-Windowsドメインアカウントでのログインを可能にする
-DNSを参照可能にする
-ファイル共有を有効にする
現在はリモートデスクトップで社内のPC上での使用は問題なし。

※逆にある程度機能が限定されていても問題無いか?
[/pukiwiki]

-infra, network, メモ

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

no image

ポート転送ツール rinetd

[pukiwiki] #topicpath #contents ポート指定で別の外部ホストへサービスを転送できるツール。 受付ホストと転送先ホストをIPアドレスで指定するところがポイント。 URLをそ …

[小ネタ]certwatch サーバー内のSSL証明書の有効期限をチェックするスクリプト

※対象のOSはRedHat Enterprise Linux 6.*とCentOS6.*です。 RedHat/CentOSに”crypto-utils”なるRPMパッケージがあ …

[AWS]EC2インスタンスにS3をマウントしてみる(s3fs)

EC2インスタンスにS3のバケットをファイルシステムとしてマウントし、ファイル転送などを試してみる。 実際に使ってみた感じではmountコマンドと同様に利用でき、扱いやすそう。 -参考ページ:お世話に …

no image

[メモ] Linux: pathmunge について

※RedHat、CentOSの話です。 /etc/profileの中で、シェルスクリプトの関数”pathmunge”という定義を見かけたので それとなくメモ。 rootアカウン …

no image

lsyncdのエラー修正(監視対象ファイル数の上限値変更)

lsyncdでのバックアップファイルの同期がうまくいってないな~、と思って調べたら、カーネルパラメータ”max_user_watches”の上限値を超えたためlsyncdのプロ …

宅麺