vpn简单中转应用服务 作者:linuxpf最后修改时间:2008.12.24
网上关于原理讲解很多,我就不多说,其它当你遇到一些问题的时候,往往试着分析下原理,主要是要知道ppp封装原理及gre路由知识.有关原理请看底下链接,本文能够实现vpn中转,基本能够应用于vpn代理上网,比如解决国内用户访问国外网站速度慢等一些应用,当然访问vpn网内资源自然不在话下
注:已经修订部分内容:合理设置ppp会话MTU为1359,避免造成一些网页无法显示,MSN无法登陆,经测试基本能够提供中转服务:包括以下:HTTP HTTPS SSL DNS SMTP POP3 DNS FTP MSN QQ
如图
1.下载到/home/download
site:http://poptop.sourceforge.net/yum/stable/rhel4/i386/
#cd /home/download
#wget http://poptop.sourceforge.net/yum/stable/rhel4/i386/ppp-2.4.3-7.rhel4.i386.rpm
#wget http://poptop.sourceforge.net/yum/stable/rhel4/i386/pptpd-1.3.4-1.rhel4.i386.rpm
#wget http://poptop.sourceforge.net/yum/stable/rhel4/i386/dkms-2.0.17.5-1.noarch.rpm
#wget http://poptop.sourceforge.net/yum/stable/rhel4/i386/kernel_ppp_mppe-1.0.2-3dkms.noarch.rpm
2.安装pptpd
#yum install kernel kernel-devel
因为此处我采用centos最小安装方式安装,系统上没有安装kernel源代码,所以重新编译过程中会出错,所以安装更新kernel源代码,根据自己的情况而定
#vi /etc/grub.conf
-----------------------------------------------------
default=0
------------------------------------------------------
设置启动内核次序
#uname -a
Linux squid.x.com 2.6.9-78.0.1.EL #1 Tue Aug 5 10:49:42 EDT 2008 i686 i686 i386 GNU/Linux
#cd /home/download
#rpm -Uvh ppp-2.4.3-7.rhel4.i386.rpm
#rpm -ivh pptpd-1.3.4-1.rhel4.i386.rpm
#rpm -ivh dkms-2.0.17.5-1.noarch.rpm
#rpm -ivh kernel_ppp_mppe-1.0.2-3dkms.noarch.rpm
3.加载内核模块
检查kernel module是否正常
#modprobe ppp-compress-18 && echo ok
ok
如果出现
#modprobe ppp-compress-18 && echo ok
FATAL: Module ppp_mppe not found.
Install them with command "rpm -ivh".
出现此提示,表明模块没有加载成功,或者内核源代码没有安装,按照以上步骤应该是不会出现此错误
4.vpn服务器设置
定制网络设置,注意如果存在多个内网网卡,则需要在vpn中设定路由表,否则过别情况无法访问到内网
内网卡:172.16.12.1
外网卡:x.x.x.x
#cd /etc/sysconfig/network-scripts
#cp ifcfg-eth0 ifcfg-eth0:1
#vi ifcfg-eth0:1
---------------------------------------------------
DEVICE=eth0:1
BOOTPROTO=static
BROADCAST=172.16.12.255
HWADDR=00:0C:2F:58:F4:4E
IPADDR=172.16.12.1
NETMASK=255.255.255.0
NETWORK=172.16.12.0
ONBOOT=yes
TYPE=Ethernet
---------------------------------------------------
5.配置pptpd
#vi /etc/pptpd.conf
___________________________________
ppp /usr/sbin/pppd
option /etc/ppp/options.pptpd
localip 172.16.12.1
remoteip 172.16.12.100-250,172.16.12.252
netmask 255.255.255.0
--------------------------------------------------------------
#vi /etc/ppp/options.pptpd
-----------------------------------
name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
ms-dns 202.177.2.166
proxyarp
logfile /var/log/pptpd.log
-----------------------------------
注:一般只需修改ms-dns
#vi /etc/ppp/chap-secrets
---------------------------------------------------------------
# Secrets for authentication using CHAP
# client server secret IP addresses
"username" pptpd "yourpassword" "*"
"admin" pptpd "password" "172.16.12.85"
---------------------------------------------------------------
每行一个用户信息,分别采用以上格式,用""引用,虽然是明文,但最好设置让此文件非属主不能够读
如果一个用户分配一个固定ip,则可以进一步进行行为控制,方便你的管理
6:create a a file
创建一个脚本文件,用于启用iptables转发功能,实现中转上网,否则无法正常工作,并使此文件开机自启动!
#vi vpn_forward
- #!/bin/bash
- #2008.11.19
- echo "Starting................."
- #configured to forward packets,using echo or sysctl
- echo 1 > /proc/sys/net/ipv4/ip_forward
- echo "Allow input and output on port 1723 for protocol tcp"
- echo "Allow input and output on protocol gre 47, required for vpn"
- echo "Enable time rsync"
- iptables -I INPUT -p tcp --dport 123 -j ACCEPT
- iptables -I INPUT -p udp --dport 123 -j ACCEPT
- iptables -I INPUT -p gre -j ACCEPT
- iptables -I INPUT -p tcp --dport 1723 -j ACCEPT
- iptables -I OUTPUT -p gre -j ACCEPT
- iptables -I OUTPUT -p tcp --sport 1723 -j ACCEPT
- echo "Insert the rule to forward all data!"
- iptables -I FORWARD -p udp --dport 8000 -s 172.16.12.0/24 -j ACCEPT
- iptables -I FORWARD -p tcp --dport 1024:8000 -j ACCEPT
- iptables -I FORWARD -p tcp --dport 20:22 -s 172.16.12.0/24 -j ACCEPT
- iptables -I FORWARD -p tcp --dport 25 -j ACCEPT
- iptables -I FORWARD -p tcp --dport 69 -j ACCEPT
- iptables -I FORWARD -p tcp --dport 110 -j ACCEPT
- iptables -I FORWARD -p tcp --dport 443 -j ACCEPT
- iptables -I FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
- iptables -I FORWARD -o eth0 -s 172.16.12.0/24 -m state --state NEW -j ACCEPT
- iptables -I FORWARD -p tcp --dport 80 -j ACCEPT
- iptables -I FORWARD -p tcp --dport 53 -j ACCEPT
- iptables -I FORWARD -p udp --dport 53 -j ACCEPT
- iptables -I FORWARD -p tcp -s 172.16.12.0/24 --dport 1723 -j ACCEPT
- echo "Set the session MTU with 1356"
- iptables -I FORWARD -p tcp --syn -s 172.16.12.0/24 -j TCPMSS --set-mss 1356
- echo "Enable NAT"
- iptables -t nat -A POSTROUTING -o eth0 -s 172.16.12.0/24 -j SNAT --to-source 202.177.24.X
- echo "Now ,Enabled Firewall Access rule Successfull"
复制代码
#chmod +x vpn_forward.sh
#cp vpn_forward /etc/rc.d/init.d/vpn_forward
#ln -s /etc/rc.d/init.d/vpn_forward /etc/rc.d/rc3.d/S94vpn_forward
说明:
(1)启用ntp时间同步
iptables -I INPUT -p tcp --dport 123 -j ACCEPT
iptables -I INPUT -p udp --dport 123 -j ACCEPT
(2)允许vpn连接
iptables -I INPUT -p gre -j ACCEPT
iptables -I INPUT -p tcp --dport 1723 -j ACCEPT
iptables -I OUTPUT -p gre -j ACCEPT
iptables -I OUTPUT -p tcp --sport 1723 -j ACCEPT
(3)启用内核ip转发功能
#configured to forward packets,using echo or sysctl
echo 1 > /proc/sys/net/ipv4/ip_forward
(4)开放forward功能,注意为了提高转发效率,只需对tcp新会话验行,已经建立起连接的会话数据包直接通行
iptables -I FORWARD -p tcp --dport 20:8000 -s 172.16.12.0/24 -j ACCEPT \\定制开户的服务
iptables -I FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT \已经建立起连接tcp数据包直接通行
iptables -I FORWARD -o eth0 -s 172.16.12.0/24 -m state --state NEW -j ACCEPT \\只需对tcp新会话验行
iptables -I FORWARD -p tcp --dport 80 -j ACCEPT \\开户http转发
iptables -I FORWARD -p tcp --dport 53 -j ACCEPT \\开户DNS服务
iptables -I FORWARD -p udp --dport 53 -j ACCEPT
iptables -I FORWARD -p tcp -s 172.16.12.0/24 --dport 1723 -j ACCEPT \\转发vpn数据包
iptables -I FORWARD -p tcp --syn -s 172.16.12.0/24 -j TCPMSS --set-mss 1356 \\协商tcp会话MTU为1359,防止过别ip包不能够分片造成问题
(5)启用NAT功能
iptables -t nat -A POSTROUTING -o eth0 -s 172.16.12.0/24 -j SNAT --to-source 202.177.14.X
如果vpn service 为动态IP对应语句修改为:iptables --table nat --append POSTROUTING --out-interface eth0 --jump MASQUERADE
7.启用日常工作管理需要
#chkconfig pptpd on
#crontab -e
*/5 * * * * /usr/sbin/ntpdate 203.129.68.14 ; /sbin/hwclock -w
0,30 8 * * 1-5 /etc/rc.d/init.d/pptpd start
0,30 18 * * 1-5 /etc/rc.d/init.d/pptpd restart-kill ; /etc/rc.d/init.d/pptpd stop
8.确保已经加载以下模块,主要针对内核版本而言, 否则NAT将不能够很好工作,在有些版本中可能存在问题
# modprobe -l >/home/modprode
# less modprode |grep ip_tables
/lib/modules/2.6.9-78.0.8.EL/kernel/net/ipv4/netfilter/ip_tables.ko
# less modprode |grep ip_conntrack_ftp
/lib/modules/2.6.9-78.0.8.EL/kernel/net/ipv4/netfilter/ip_conntrack_ftp.ko
# less modprode |grep ip_conntrack
/lib/modules/2.6.9-78.0.8.EL/kernel/net/ipv4/netfilter/ip_conntrack_tftp.ko
/lib/modules/2.6.9-78.0.8.EL/kernel/net/ipv4/netfilter/ip_conntrack_proto_sctp.ko
/lib/modules/2.6.9-78.0.8.EL/kernel/net/ipv4/netfilter/ip_conntrack_amanda.ko
/lib/modules/2.6.9-78.0.8.EL/kernel/net/ipv4/netfilter/ip_conntrack.ko
/lib/modules/2.6.9-78.0.8.EL/kernel/net/ipv4/netfilter/ip_conntrack_irc.ko
/lib/modules/2.6.9-78.0.8.EL/kernel/net/ipv4/netfilter/ip_conntrack_ftp.ko
9.完整iptables表,以上脚本定制于centos4.6,其它系统请结合起来修改
#iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:1723
ACCEPT gre -- anywhere anywhere
ACCEPT udp -- anywhere anywhere udp dpt:ntp
ACCEPT tcp -- anywhere anywhere tcp dpt:ntp
RH-Firewall-1-INPUT all -- anywhere anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
TCPMSS tcp -- 172.16.12.0/24 anywhere tcp flags:SYN,RST,ACK/SYN TCPMSS set 1356
ACCEPT tcp -- 172.16.12.0/24 anywhere tcp dpt:1723
ACCEPT udp -- anywhere anywhere udp dpt:domain
ACCEPT tcp -- anywhere anywhere tcp dpt:domain
ACCEPT tcp -- anywhere anywhere tcp dpt:http
ACCEPT all -- 172.16.12.0/24 anywhere state NEW
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:https
ACCEPT tcp -- anywhere anywhere tcp dpt:pop3
ACCEPT tcp -- anywhere anywhere tcp dpt:tftp
ACCEPT tcp -- anywhere anywhere tcp dpt:smtp
ACCEPT tcp -- 172.16.12.0/24 anywhere tcp dpts:ftp-data:ssh
ACCEPT tcp -- anywhere anywhere tcp dpts:1024:8000
ACCEPT udp -- 172.16.12.0/24 anywhere udp dpt:8000
RH-Firewall-1-INPUT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp spt:1723
ACCEPT gre -- anywhere anywhere
Chain RH-Firewall-1-INPUT (2 references)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT icmp -- anywhere anywhere icmp any
ACCEPT ipv6-crypt-- anywhere anywhere
ACCEPT ipv6-auth-- anywhere anywhere
ACCEPT udp -- anywhere 224.0.0.251 udp dpt:5353
ACCEPT udp -- anywhere anywhere udp dpt:ipp
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:3128 state NEW
ACCEPT udp -- anywhere anywhere udp dpt:3128 state NEW
ACCEPT tcp -- anywhere anywhere tcp dpt:22 state NEW
ACCEPT tcp -- anywhere anywhere tcp dpt:32100 state NEW
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
[root@vm home]# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT all -- 172.16.12.0/24 anywhere to:202.177.24.x
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
10.测试:
客户端新建一个vpn联接,要求加密连接,针对服务端配置不同而定.默认就行!
成功拔入后客户端:默认远程网关是本身,同时注意设置DNS[img]
服务端会话:
pptpd包封装格式:
相关:
分析pptpd转发测试
http://poptop.sourceforge.net/dox/diagnose-forwarding.phtml
pptpd内核补丁安装问题
http://members.optushome.com.au/~wskwok/poptop_ads_howto_a1.htm
http://bbs.chinaunix.net/viewthread.php?tid=847612
关于MTU问题分析
http://bbs.chinaunix.net/thread-694733-1-1.html
关于GRE封装原理分析
http://www.linuxpf.com.cn/bbs/vi ... =page%3D1&frombbs=1
点对点隧道协议PPTP
http://www.linuxpf.com.cn/bbs/vi ... =page%3D1&frombbs=1
PPTP流量分析
http://www.microsoft.com/china/t ... ableguy/cg0103.mspx

没有评论:
发表评论