June 14, 2011

PPPoE ServerをUbuntu 11.04で設定する方法




以前にもUbuntuでpppoe-serverを使ってPPPoEサーバを立てるというエントリを作成しましたが、Ubuntu 11.04になって少しだけ設定ファイルが変わったので、改めてUbuntu 11.04でのPPPoEサーバの設定方法を書き残します。
基本的に、最小構成でPPPoEリンクを作成するために、ローカルでのPAP認証などを使ってシンプルに設定する方法を紹介します。



pppoeのインストール


% sudo apt-get install pppoe


Ubuntuのネットワーク設定を準備


man pppoe-serverにとても丁寧に設定方法や注意事項が記載されていますので、読めるようであればこのドキュメントを確認しながら進んでください。
,
まずは、ppp0論理インターフェースを割り当てるサーバの物理インターフェース(eth0など)にはIPアドレスを設定しないでください。pppoe-serverプロセスが代わりにppp0へのアドレス割り当てを行います。

-I interface

The -I option specifies the Ethernet interface to use. Under Linux, it is typically eth0 or eth1.
The interface should be "up" before you start pppoe-server, but should not be configured to have an IP address.
You can supply multiple -I options if you want the server to respond on more than one interface.
* man pppoeから抜粋

IPアドレスの削除は、一時的には下記のように行います。恒久的には/etc/network/interface 等で調整してください。
% sudo ip addr delete 192.168.0.1/24 dev eth0
%


また、Ubuntuをルーターとしてパケット転送させるために、以下のKernelパラメーターをセットしてください。

% echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
%


pppoe-serverの設定


各種設定ファイルは/etc/ppp 以下に揃っています。
基本的な設定ファイルとPAPシークレットファイルを作成してください。

# /etc/ppp/pppoe-server-options 
ms-dns 8.8.8.8
ms-dns 8.8.4.4
require-pap
login
lcp-echo-interval 30
lcp-echo-failure 4

# /etc/ppp/pap-secrets
USERNAME  *  "PASSWORD"  IPADDRESS

pap-secretsについては、このファイル自体にもHelpが記載されていますが、/etc/passwdからローカルユーザの認証情報を利用することが出来ます。USERNAMEとPASSWORDには任意の情報を記載してください。
IPADDRESSには、PPPoE Clientに割り当てるIPアドレスを記載してください。


pppoe-serverの起動


起動する前に、pppoe-serverのログをモニターしておきましょう。クライアントの接続確認が出来るまで、モニターは続けてトラブルシューティングしましょう。

% tail -f /var/log/syslog
%


では、pppoe-serverを起動します。

% pppoe-server -I eth0 -L 192.168.1.254 -R 192.168.1.1
%

ここでいう192.168.1.254はPPPoEサーバ側の(L)ocal IP addressです。192.168.1.1はPPPoEクライアント側の(R)emote IP addressです。任意のアドレスを指定しましょう。
pppoe-serverが立ち上がり、PPPoE側が接続しに来たとき、正しくネゴシエーション出来ると以下のようなログが確認できるはずです。


Jun 14 13:53:31 Ubuntu pppoe-server[2313]: Session 1 created for client **:**:**:**:**:** (192.168.1.1) on eth0 using Service-Name ''
Jun 14 13:53:31 Ubuntu pppd[2313]: pppd 2.4.5 started by root, uid 0
Jun 14 13:53:31 Ubuntu pppd[2313]: using channel 25
Jun 14 13:53:31 Ubuntu pppd[2313]: Using interface ppp0
Jun 14 13:53:31 Ubuntu pppd[2313]: Connect: ppp0 <--> /dev/pts/1
Jun 14 13:53:31 Ubuntu pppd[2313]: rcvd [LCP ConfReq id=0x1  ]
Jun 14 13:53:31 Ubuntu pppd[2313]: sent [LCP ConfReq id=0x1  ]
Jun 14 13:53:31 Ubuntu pppd[2313]: sent [LCP ConfAck id=0x1  ]
Jun 14 13:53:31 Ubuntu pppd[2313]: rcvd [LCP ConfAck id=0x1  ]
Jun 14 13:53:31 Ubuntu pppd[2313]: sent [LCP EchoReq id=0x0 magic=0x669eb813]
Jun 14 13:53:31 Ubuntu pppd[2313]: rcvd [LCP EchoReq id=0x0 magic=0xe7da9181]
Jun 14 13:53:31 Ubuntu pppd[2313]: sent [LCP EchoRep id=0x0 magic=0x669eb813]
Jun 14 13:53:31 Ubuntu pppd[2313]: rcvd [PAP AuthReq id=0x1 user="USERNAME" password=]
Jun 14 13:53:31 Ubuntu pppd[2313]: Initializing PAM (3) for user USERNAME
Jun 14 13:53:31 Ubuntu pppd[2313]: ---> PAM INIT Result = 0
Jun 14 13:53:31 Ubuntu pppd[2313]: Attempting PAM authentication
Jun 14 13:53:31 Ubuntu pppd[2313]: PAM Authentication OK for USERNAME
Jun 14 13:53:31 Ubuntu pppd[2313]: Attempting PAM account checks
Jun 14 13:53:31 Ubuntu pppd[2313]: PAM Account OK for USERNAME
Jun 14 13:53:31 Ubuntu pppd[2313]: PAM Session opened for user USERNAME
Jun 14 13:53:31 Ubuntu pppd[2313]: user USERNAME logged in on tty  intf ppp0
Jun 14 13:53:31 Ubuntu pppd[2313]: PAP peer authentication succeeded for USERNAME
Jun 14 13:53:32 Ubuntu pppd[2313]: local  IP address 192.168.1.254
Jun 14 13:53:32 Ubuntu pppd[2313]: remote IP address 192.168.1.1


接続できましたか?

必要であれば、/etc/rc.local 等でスタートアップ時にPPPoEサーバとして立ち上がるよう設定もしておきましょう。ここはあなたの環境に合わせて調整してください。
NATが必要になる場合はiptablesで設定するとよいでしょう。

# /etc/rc.local
ifconfig eth0 up
pppoe-server -I eth0 -L 192.168.1.254 -R 192.168.1.1
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 192.168.2.254

exit 0