Linux pptp client setup LAN TO LAN PPTP connection over an ADSL link
2008-02-23 00:46:06
之所以用这样的一个英文标题,是因为实在不知道如何用准确的中文来描述它了.一般而言,我们在家要访问公司内网都是采用vpn拨入功能.在windows下,单机拨入远程vpn网络非常简单,windows自带了vpn client,在新建连接里稍稍设置一下就可以了.但是,此办法只能让建立vpn拨号连接的机器访问到公司内网,今天出现了一个新的问题.另一个分公司要访问总公司的内网上的一些服务器.而此分公司采用ADSL拨号共享上网方式,没有固定IP,那么如何满足分公司内员工vpn的需求呢?如果每个员工都建立vpn拨号连接,对ADSL的压力无疑很大.比较好的办法是建立一台server专门负责与总公司进行vpn连接,然后其他机器通过此server来公用vpn线路.通过网上查找资料,我找到在linux下实现的办法.
PPTP,是我们这种拨号vpn接入的协议模式.linux下也有和windows vpn server兼容的客户端. LAN TO LAN 是指通讯模式.一般单机拨入vpn的模式为client to LAN.而这里我们要把vpn共享给整个局域网,所以采用LAN TO LAN的方式.
学习连接
http://blog.chinaunix.net/opera/showart.php?blogid=17855&id=459777 http://pptpclient.sourceforge.net/routing.phtml#automatic-setup http://pptpclient.sourceforge.net/routing-lan-to-lan-via-adsl.phtml 1,下载与安装(http://pptpclient.sourceforge.net/),请下载与你操作系统相关的软件包,如果安装时有包依赖关系,请到 rpmfind.net查找并安装(我的系统就依赖libglade-0.17-13.2.1.i386.rpm,libxml-1.8.17-9.i386.rpm这两个包),要下载的软件列表如下
:
php-gtk-pcntl-1.0.2-1.i386.rpm pptp-1.7.1-3.i386.rpm php4-pcntl-4.4.1-2.i386.rpm php4-pcntl-gtk-1.0.2-2.i386.rpm pptpconfig-20060821-1.fc5.noarch.rpm dkms-2.0.10-1.noarch.rpm
kernel_ppp_mppe-1.0.2-3dkms.noarch.rpm
安装这些rpm包,注意需要解决依赖关系: 如果觉得找这些包麻烦的话,可以用yum来升级 # rpm -Uvh http://pptpclient.sourceforge.net/yum/stable/fc6/pptp-release-current.noarch.rpm 这里根据你的发行版去更新对应的rpm # yum --enablerepo=pptp-stable install pptpconfig 会自动安装相关的包,并解决依赖关系.呵呵. 安装完成后.运行应用程序-系统工具-PPTP 客户端或者在终端下输入pptpconfig
出来图形界面
用图形界面拨号,在第2页有个routing style,默认是client to LAN,如果想共享vpn连接,这里选LAN TO LAN
然后在右边的Edit Network Routes 里面添加要定义的路由,比如公司内网是192.168.1.0/24 就添加192.168.1.0/24,下面的name无所谓了. ok之后点start就自动拨号了.拨通后即可从本机访问到公司内网 [添加默认路由(所有网络通讯都走vpn)
route add default gw 172.16.0.10 device ppp0 添加公司内部网段192.168.1.0的路由
route add -net 192.168.1.0 netmask 255.255.255.0 gw 172.16.0.10 device ppp0 添加某台主机的路由
route add -host 192.168.1.111 gw 172.16.0.3 dev ppp0
] 以上是图形界面下的办法,如果要在字符界面下,
需要手写一些配置文件 a. vi /etc/ppp/chap-secrets #client server Password IP Address chinabank\\username vpn password * #域名\\用户名 服务器名 密码 b. vi /etc/ppp/options.pptp
lock noauth refuse-eap refuse-chap refuse-mschap nobsdcomp nodeflate require-mppe-128 c. vi /etc/ppp/peers/vpn
建立拨号脚本文件(vpn和上面的服务器名对应) remotename vpn linkname vpn ipparam vpn pty "pptp 220.231.5.67 --nolaunchpppd" #220.231.5.67-VPN服务器地址 name chinabank\\username #chinabank域名username-VPN用户名 usepeerdns require-mppe refuse-eap noauth file /etc/ppp/options.pptp # 配置文件所在位置 d. 拨号
#vi vpn.sh pppd call vpn logfd 2 nodetach& #chmod 700 vpn.sh
如果是LAN TO LAN.刚才的vpn.sh还需要补充以下内容
#iptables -F #iptables -t nat -F #route add -net 192.168.1.0 netmask 255.255.255.0 dev ppp0 #iptables --insert OUTPUT 1 --source 0.0.0.0/0.0.0.0 --destination 192.168.1.0/24 --jump ACCEPT --out-interface 'ppp0' #iptables --insert INPUT 1 --source 192.168.1.0/24 --destination 0.0.0.0/0.0.0.0 --jump ACCEPT --in-interface 'ppp0' #iptables --insert FORWARD 1 --source 0.0.0.0/0.0.0.0 --destination 192.168.1.0/24 --jump ACCEPT --out-interface 'ppp0' #iptables --insert FORWARD 1 --source 192.168.1.0/24 --destination 0.0.0.0/0.0.0.0 --jump ACCEPT #iptables --table nat --append POSTROUTING --out-interface 'ppp0' --jump MASQUERADE #iptables --append FORWARD --protocol tcp --tcp-flags SYN,RST SYN --jump TCPMSS --clamp-mss-to-pmtu 特例, LAN TO LAN VIA ADSL
# route add -net privatenet netmask 255.0.0.0 dev ppp1
pvivatenet私有网络(指的是试图访问的远端私有网络,远程公司的局域网) ## Authorizing Outbound traffic from anywhere to foreign network
# iptables --insert OUTPUT 1 --source 0.0.0.0/0.0.0.0 \ --destination privatenet/255.0.0.0 --jump ACCEPT \ --out-interface ppp0 ## Authorizing Inbound traffic from foreign network to anywhere
# iptables --insert INPUT 1 --source privatenet/255.0.0.0 \ --destination 0.0.0.0/0.0.0.0 --jump ACCEPT --in-interface ppp0 # Authorizing packet forwarding from anywhere to the
# foreign network using ppp0 interface # iptables --insert FORWARD 1 --source 0.0.0.0/0.0.0.0 \ --destination privatenet/255.0.0.0 --jump ACCEPT \ --out-interface ppp0 ## Authorizing packet forwarding from foreign network to anywhere
# iptables --insert FORWARD 1 --source vpn_net/255.0.0.0 \ --destination 0.0.0.0/0.0.0.0 --jump ACCEPT ## Masquerading on ppp0
# iptables --table nat --append POSTROUTING \ --out-interface ppp0 --jump MASQUERADE ## Masquerading on ppp1
# iptables --table nat --append POSTROUTING \ --out-interface ppp1 --jump MASQUERADE ## Fixes the path MTU discovery problem
# iptables --append FORWARD --protocol tcp \ --tcp-flags SYN,RST SYN --jump TCPMSS --clamp-mss-to-pmtu 和LAN TO LAN的区别在于PPP1也要进行IP伪装.
以上就完成了一台linux server作为pptp client端实现vpn拨号的功能.同时又能将拨通的vpn共享给同网段的局域网用户.
另外VPN还可以用site to site的方式来实现本文的要求.
附上开机自动拨号的脚本
vi vpn.sh
#!/bin/bash
pppd call vpn logfd 2 nodetach&
sleep 10
#iptables -F
#iptables -t nat -F #ip route replace 220.231.5.67 via 192.168.2.1 dev eth0 src 192.168.2.110 本文出自 51CTO.COM技术博客#ip route add '192.168.1.0/24' dev 'ppp0' #iptables --insert OUTPUT 1 --source 0.0.0.0/0.0.0.0 --destination 192.168.1.0/24 --jump ACCEPT --out-interface 'ppp0' #iptables --insert INPUT 1 --source 192.168.1.0/24 --destination 0.0.0.0/0.0.0.0 --jump ACCEPT --in-interface 'ppp0' #iptables --insert FORWARD 1 --source 0.0.0.0/0.0.0.0 --destination 192.168.1.0/24 --jump ACCEPT --out-interface 'ppp0' #iptables --insert FORWARD 1 --source 192.168.1.0/24 --destination 0.0.0.0/0.0.0.0 --jump ACCEPT #iptables --table nat --append POSTROUTING --out-interface 'ppp0' --jump MASQUERADE #iptables --append FORWARD --protocol tcp --tcp-flags SYN,RST SYN --jump TCPMSS --clamp-mss-to-pmtu |



coolerfeng
博客统计信息
热门文章
最新评论
友情链接


