linux で pptp サーバを active directoryと連携させよう。
linux で作った pptp サーバの認証を active directoryと連携させてみようという話です。
pptp には poptop (10年前ぐらいからある安心のブランドw)、 AD と連携する部分に winbind を利用します。
図解するとこんな感じ pptp ---> winbind ----> Active Directory
A1.samba winbind の環境構築
samba winbind の環境を構築します。
http://d.hatena.ne.jp/rti7743/20110426/1303840756
A2.pptpd 導入。
残念ながら yum では入りません。なんでだろうw
しかし、親切な方が rpm を作られているので、そちらで入れることは可能です。
http://poptop.sourceforge.net/yum/beta/packages/
wget http://poptop.sourceforge.net/yum/beta/packages/ppp-2.4.5-8.1.rhel5.x86_64.rpm wget http://poptop.sourceforge.net/yum/beta/packages/pptpd-1.3.4-2.rhel5.1.x86_64.rpm rpm -Uvh pp*.rpm
10年ぐらい昔は、カーネルにパッチあてたりいろいろしないといけなかったよーなこともありましたが、それも遠い昔。ふつーに動作します。便利な世の中になったものですw。
A3. sysctl で ip_forward を有効にします。
このままだとpptpサーバまでしか接続できないので、
このpptpサーバをルータとして使い他のサーバにも行けるように設定します。
vi /etc/sysctrl.conf
------------------------------ net.ipv4.ip_forward = 0 ---↓変更--------------------- net.ipv4.ip_forward = 1 ------------------------------
設定ファイルを再読込させます。
sysctl -p
設定が有効になったか確認します。
以下のコマンドの結果が 1 と表示されればOKです。
cat /proc/sys/net/ipv4/ip_forward
C1.pptpd の認証を winbind に委託します。
一番下に追記してください。
vi /etc/ppp/options.pptpd
--内容---------------------------------------------------------- plugin winbind.so ntlm_auth-helper "/usr/bin/ntlm_auth --helper-protocol=ntlm-server-1" ----------------------------------------------------------------
これで終わりですw
あと pptpd を再起動すれば、それで完了です。
これだけで、 pptpd と active directory が連携できてしまうのです。
超絶楽ですね。
しかし、これでは割り当てするIPアドレスの指定などができていないのでもうちょっと調整します。
D1. 割り当てるIPアドレスなどを調整します
ファイルの一番下に追記してください。
vi /etc/pptpd.conf
--内容---------------------------------------------------------- localip 192.168.59.1 remoteip 192.168.59.100-200 ----------------------------------------------------------------
E1.pptp起動。
できたので、 pptpd を起動します。
/etc/init.d/pptpd start
windows機から接続しています。
ADと連携しているので、ADにいるユーザーでログインします。
ただし、ドメインのところは空白でやります。
うまくつながるはず。
うまくいかんゾ
うまくつながらない場合、 message(めっさげと一部の人は呼ぶ)にログが出ているので確認してください。
pptpd または、 ppp と表示されている項目がヒントになると思います。
less /var/log/messages
--内容例----------------------------------------------------------------------------------- Apr 27 03:05:20 samba3 pptpd[6454]: CTRL: Client 192.168.56.1 control connection started Apr 27 03:05:20 samba3 pptpd[6454]: CTRL: Starting call (launching pppd, opening GRE) Apr 27 03:05:20 samba3 pppd[6455]: Plugin winbind.so loaded. Apr 27 03:05:20 samba3 pppd[6455]: WINBIND plugin initialized. Apr 27 03:05:20 samba3 pppd[6455]: Plugin /usr/lib64/pptpd/pptpd-logwtmp.so loaded. Apr 27 03:05:20 samba3 pppd[6455]: pppd 2.4.5 started by root, uid 0 Apr 27 03:05:20 samba3 pppd[6455]: Using interface ppp0 Apr 27 03:05:20 samba3 pppd[6455]: Connect: ppp0 <--> /dev/pts/1 Apr 27 03:05:23 samba3 pptpd[6454]: CTRL: Ignored a SET LINK INFO packet with real ACCMs! Apr 27 03:05:23 samba3 pppd[6455]: MPPE 128-bit stateless compression enabled Apr 27 03:05:25 samba3 pppd[6455]: Cannot determine ethernet address for proxy ARP Apr 27 03:05:25 samba3 pppd[6455]: local IP address 10.0.0.10 Apr 27 03:05:25 samba3 pppd[6455]: remote IP address 10.0.0.101 Apr 27 03:08:24 samba3 pppd[6455]: LCP terminated by peer (yl^JM-:^@<M-Mt^@^@^@^@) Apr 27 03:08:24 samba3 pppd[6455]: Connect time 3.0 minutes. Apr 27 03:08:24 samba3 pppd[6455]: Sent 0 bytes, received 39608 bytes. Apr 27 03:08:24 samba3 pppd[6455]: Modem hangup Apr 27 03:08:24 samba3 pppd[6455]: Connection terminated. Apr 27 03:08:24 samba3 pppd[6455]: Exit. ---------------------------------------------------------------------------------------------
もっと詳細なエラーがみたい人は、 デバッグモードに切り替えることもできます。
vi /etc/pptpd.conf
--変更------------------------------------------------------------- #debug ↓変更↓ debug ------------------------------------------------------------------
設定変更後、 pptpd を再起動します。
/etc/init.d/pptpd restart
MACOSXで繋がらない
iOS(iphone)やwindowsからだと繋がるのに、MACOSXからだけ繋がらない場合がありました。
mtuを直すと大丈夫です。
vi /etc/ppp/options.pptpd
--内容---------------------------------------------------------- mtu 1200 ----------------------------------------------------------------
F1. グループで制限をかける
グループに制限をかけてみます。
vpn-allow というグループを作って、そのグループに所属している人だけが VPN できるようにします。
vpn-allowという文字列を SID 化して登録しました。
SIDの求め方の解説は、前回を参考にしてください。
id rti2 uid=11107(rti2) gid=10513(domain users) 所属グループ=10513(domain users),11109(linux_logon),11110(vpn-allow) wbinfo --gid-to-sid 11110 S-1-5-21-2558067586-3132001088-1936578106-1110
SIDによる制限を記述しました。
vi /etc/ppp/options.pptpd
--内容---------------------------------------------------------- plugin winbind.so ntlm_auth-helper "/usr/bin/ntlm_auth --helper-protocol=ntlm-server-1 --require-membership-of=S-1-5-21-2558067586-3132001088-1936578106-1110" ----------------------------------------------------------------
試してみます。資格を持っていないユーザがアクセスすると接続エラーになり、以下のようにエラーが /var/log/messages に記録されました。
デバッグモードで動かしているのでログの量が多めです。
Apr 27 03:40:50 samba3 pppd[7201]: Connect: ppp0 <--> /dev/pts/1 Apr 27 03:40:53 samba3 pptpd[7200]: CTRL: Ignored a SET LINK INFO packet with real ACCMs! Apr 27 03:40:53 samba3 pppd[7201]: Winbind has declined authentication for user! Apr 27 03:40:53 samba3 pppd[7201]: Logon failure Apr 27 03:40:53 samba3 pppd[7201]: Peer rti failed CHAP authentication Apr 27 03:40:53 samba3 pppd[7201]: Connection terminated. Apr 27 03:40:53 samba3 pppd[7201]: Exit.
次に資格を持っているユーザーでアクセスしてます。
こちらは、うまくいきました。
Apr 27 03:40:30 samba3 pppd[7155]: Connect: ppp0 <--> /dev/pts/1 Apr 27 03:40:30 samba3 pppd[7155]: MPPE 128-bit stateless compression enabled Apr 27 03:40:30 samba3 pptpd[7154]: CTRL: Ignored a SET LINK INFO packet with real ACCMs! Apr 27 03:40:32 samba3 pppd[7155]: Cannot determine ethernet address for proxy ARP Apr 27 03:40:32 samba3 pppd[7155]: local IP address 192.168.59.1 Apr 27 03:40:32 samba3 pppd[7155]: remote IP address 192.168.59.100
メモ:文字列グループ名で制限をかけるために require-membership-of=RTI7743+vpn-allow や require-membership-of=RTI7743/vpn-allow や require-membership-of=RTI7743\vpn-allow や require-membership-of=RTI7743\\vpn-allow などといろいろ指定してみたのですが、すべてエラーで弾かれてしまいました。
やはり、SID で指定するのが一番なようです。
文字列したときのエラーログ
Apr 27 03:27:07 samba3 pppd[6740]: Connect: ppp0 <--> /dev/pts/1 Apr 27 03:27:07 samba3 ntlm_auth: [2011/04/27 03:27:07.652344, 0] utils/ntlm_auth.c:274(get_require_membership_sid) Apr 27 03:27:07 samba3 ntlm_auth: Could not parse vpn-allow into seperate domain/name parts! Apr 27 03:27:07 samba3 pppd[6740]: Winbind has declined authentication for user! Apr 27 03:27:07 samba3 pppd[6740]: (null) Apr 27 03:27:07 samba3 pppd[6740]: Peer rti failed CHAP authentication Apr 27 03:27:07 samba3 pppd[6740]: Connection terminated. Apr 27 03:27:07 samba3 pppd[6740]: Exit.