之所以用这样的一个英文标题,是因为实在不知道如何用准确的中文来描述它了.一般而言,我们在家要访问公司内网都是采用***拨入功能.在windows下,单机拨入远程***网络非常简单,windows自带了*** client,在新建连接里稍稍设置一下就可以了.但是,此办法只能让建立***拨号连接的机器访问到公司内网,今天出现了一个新的问题.另一个分公司要访问总公司的内网上的一些服务器.而此分公司采用ADSL拨号共享上网方式,没有固定IP,那么如何满足分公司内员工***的需求呢?如果每个员工都建立***拨号连接,对ADSL的压力无疑很大.比较好的办法是建立一台server专门负责与总公司进行***连接,然后其他机器通过此server来公用***线路.通过网上查找资料,我找到在linux下实现的办法.
       PPTP,是我们这种拨号***接入的协议模式.linux下也有和windows *** server兼容的客户端.  LAN TO LAN 是指通讯模式.一般单机拨入***的模式为client to LAN.而这里我们要把***共享给整个局域网,所以采用LAN TO LAN的方式.
 
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 [url]http://pptpclient.sourceforge.net/yum/stable/fc6/pptp-release-current.noarch.rpm[/url]
这里根据你的发行版去更新对应的rpm
# yum --enablerepo=pptp-stable install pptpconfig
会自动安装相关的包,并解决依赖关系.呵呵.
 
安装完成后.运行应用程序-系统工具-PPTP 客户端或者在终端下输入pptpconfig
出来图形界面
用图形界面拨号,在第2页有个routing style,默认是client to LAN,如果想共享***连接,这里选LAN TO LAN
然后在右边的Edit Network Routes 里面添加要定义的路由,比如公司内网是192.168.1.0/24
就添加192.168.1.0/24,下面的name无所谓了.
ok之后点start就自动拨号了.拨通后即可从本机访问到公司内网
[添加默认路由(所有网络通讯都走***)
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 *** 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/***
建立拨号脚本文件(***和上面的服务器名对应)
remotename ***
linkname ***
ipparam ***
pty "pptp 220.231.5.67 --nolaunchpppd"
#220.231.5.67-×××服务器地址
name chinabank\\username
#chinabank域名username-×××用户名
usepeerdns
require-mppe
refuse-eap
noauth
file /etc/ppp/options.pptp
# 配置文件所在位置
d. 拨号
#vi ***.sh
pppd call *** logfd 2 nodetach&
#chmod 700 ***.sh
如果是LAN TO LAN.刚才的***.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 ***_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端实现***拨号的功能.同时又能将拨通的***共享给同网段的局域网用户.
另外×××还可以用site to site的方式来实现本文的要求.
 
附上开机自动拨号的脚本
vi ***.sh
#!/bin/bash
pppd call *** 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
#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