rp-pppoe是一个集成了拨号客户端和服务端的解决方案
下载地址:http://www.roaringpenguin.com/products/pppoe
rp-pppoe里面的pppoe server分用户模式和内核模式。
用户模式下以创建一个pppoe进程来为一个新的连接服务;
内核模式下以创建一个pppd进程并带上参数plugin /etc/ppp/plugins/rp-pppoe.so来接受客户端的连接
建议选择内核模式运行pppoe server,这样一些系统调用不需要在内核和用户模式之间切换,可以提高速度。
ps -ef
(用户模式)
root 5093 1 0 09:36 ? 00:00:00 /usr/sbin/pppoe-server -I eth0 -L 10.0.0.1 -R 10.0.0.2 -N 64
root 5101 5093 0 09:38 ? 00:00:00 pppd pty /usr/sbin/pppoe -n -I eth0 -e 1:00:1d:60:45:d9:d4 -S '' file /etc/ppp/pppoe-server-options 10.0.0.1:10.0.0.2 nodetach noaccomp nobsdcomp nodeflate nopcomp novj novjccomp default-asyncmap
nobody 5103 5101 0 09:38 ? 00:00:00 /usr/sbin/pppoe -n -I eth0 -e 1:00:1d:60:45:d9:d4 -S
(内核模式)
root 7541 1 0 09:46 ? 00:00:00 /usr/sbin/pppoe-server -I eth0 -L 10.0.0.1 -R 10.0.0.2 -N 64 -k
root 7572 7541 0 09:48 ? 00:00:00 pppd plugin /etc/ppp/plugins/rp-pppoe.so nic-eth0 rp_pppoe_sess 2:00:1d:60:45:d9:d4 rp_pppoe_service file /etc/ppp/pppoe-server-options 10.0.0.1:10.0.0.3 nodetach noaccomp nobsdcomp nodeflate nopcomp novj novjccomp default-asyncmap
下载、编译、安装的步骤:
(用户模式)
rp-pppoe-3.10.tar.gz 在 /opt 目录下。
tar -zxvf rp-pppoe-3.10.tar.gz
cd rp-pppoe-3.10/src
./configure
make
make install
(内核模式)
下载pppd,pppd是一个pppoe拨号客户端,地址:ftp://ftp.samba.org/pub/ppp/
ppp-2.4.5.tar.gz 、rp-pppoe-3.10.tar.gz 在 /opt 目录下。
tar -zxvf ppp-2.4.5.tar.gz
cd ppp-2.4.5
./configure
make
make install
cd /opt
tar -zxvf rp-pppoe-3.10.tar.gz
cd rp-pppoe-3.10/src
./configure --enable-plugin=/opt/ppp-2.4.5
make
make install
修改配置文件:
cd /etc/ppp
vim pppoe.conf
修改下面几个值,其他的不要动
ETH=eth0
USER=rp-pppoe
LINUX_PLUGIN=/etc/ppp/plugins/rp-pppoe.so
vim pppoe-server-options
下面是全部内容
require-chap
login
lcp-echo-interval 10
lcp-echo-failure 2
vim chap-secrets
rp-pppoe * rp-pppoe *
vim options
local
运行程序:
(用户模式)
/usr/sbin/pppoe-server -I eth0 -L 10.0.0.1 -R 10.0.0.2 -N 64
(内核模式)
/usr/sbin/pppoe-server -I eth0 -L 10.0.0.1 -R 10.0.0.2 -N 64 -k
-I 指定局域网网卡
-L 指定pppoe server的IP地址
-R 为客户分配的起始IP地址
-N 指定分配给客服端IP地址的个数
-k 使用内核模式
现在就可以用pppoe客户端来连接我们已经运行的pppoe server了,用户名和密码为上面设置的
rp-pppoe和rp-pppoe,认证方式为CHAP
但是客户端连接上去后不能上网,因为服务器那边没有进行数据包的转发。
虚拟机添加了2块网卡,eth0和eth1,eth0是静态IP,eth1为DHCP方式获取IP。
需要修改下配置脚本
cd /etc/sysconfig/network-scripts
vim ifcfg-eth0
# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
DEVICE=lan
IPADDR=192.168.61.120
NETMASK=255.255.255.0
GATEWAY=192.168.61.1
DNS1=61.139.2.69
DNS2=192.168.61.1
HWADDR=00:0c:29:6b:71:d6
ONBOOT=yes
BOOTPROTO=static
USERCTL=no
IPV6INIT=yes
NM_CONTROLLED=yes
TYPE=Ethernet
vim ifcfg-eth1
TYPE="Ethernet"
HWADDR=00:0C:29:6B:71:E0
BOOTPROTO=dhcp
DEVICE=wan
ONBOOT=yes
开启数据包转发
echo "1">>/proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
好了,现在客户端这边就可以上网了。
下面是 etherPeek 抓包的截图,pppoe发现阶段已经省去,只是TCP3次握手和4次挥手的抓包。
10.0.0.10是pppoe客户端的IP,192.168.61.206是linux下eth1的IP,每次局域网网关收到eth0上的数据,然后把源IP改成eth1的IP,目的IP不变,
广域网网卡收到远端服务器返回的数据,就把目的IP修改成内网主机pppoe的IP。
TCP3次握手
4次挥手