當(dāng)我們有一個(gè)本地服務(wù)又想暫時(shí)對(duì)外提供的時(shí)候,發(fā)現(xiàn)機(jī)子在內(nèi)網(wǎng)。這個(gè)時(shí)候我們剛好手上有臺(tái)VPS,那么接下來(lái)我們就來(lái)嘗試下穿透內(nèi)網(wǎng)對(duì)外提供
主機(jī)名 IP VPN IP 備注
VPS 外網(wǎng) 192.168.31.133 192.168.0.1 外網(wǎng)VPS
server 內(nèi)網(wǎng) 192.168.137.2 192.168.0.234 VPN客戶(hù)端
1.VPS開(kāi)啟VPN,我們選擇pptp比較簡(jiǎn)單。
需要安裝ppp pptpd 還需要支持iptables(安裝iptables為了做nat,基本都帶iptables)
vps情況如下
[root@localhost ~]# cat /etc/issue
CentOS release 5.5 (Final)
[root@localhost ~]# uname -a
Linux MiWiFi-R1D 2.6.18-194.el5 #1 SMP Fri Apr 2 14:58:14 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux
版本為centos 5.5 內(nèi)核為2.6.18.
ps內(nèi)核版本在2.6.15后的默認(rèn)都已經(jīng)有了MPPE(Microsoft Point to Point Encryption,微軟點(diǎn)對(duì)點(diǎn)加密)補(bǔ)丁,所以不需要再安裝dkms和kernel_ppp_mppe內(nèi)核補(bǔ)丁。
1)安裝pptp vpn服務(wù)
a.查看是否有ppp,iptables
[root@localhost ~]# rpm -qa|grep iptables
iptables-1.3.5-5.3.el5_4.1
iptables-ipv6-1.3.5-5.3.el5_4.1
[root@localhost ~]# rpm -qa|grep ppp
rp-pppoe-3.5-32.1
ppp-2.4.4-2.el5
可以看到是支持ppp和iptables,否則就yum install安裝
ppp-2.4.4-2.el5
iptables-1.3.5-5.3.el5_4.1
b.查看是否支持安裝pptp
網(wǎng)上一般2個(gè)方法,一個(gè)看知否支持
[root@localhost ~]# modprobe ppp-compress-18 && echo ok////////////問(wèn)題點(diǎn)////////////////
ok
(用模塊方式支持MPPE加密模式瀏覽,如果內(nèi)核支持檢測(cè)不到。)顯示“ok”則表明通過(guò)。
[root@localhost ~]# cat /dev/net/tun
cat: /dev/net/tun: File descriptor in bad state
上述兩條只要一條通過(guò),就能安裝pptp。
c.安裝pptp
安裝 pptpd
加入 yum 源
rpm -Uvh http://poptop.sourceforge.net/yum/stable/rhel5/pptp-release-current.noarch.rpm
安裝 pptpd
yum install pptpd
[root@localhost proc]# yum list|grep pptpd
pptpd.x86_64 1.4.0-1.rhel5 installed
沒(méi)裝直接
yum install
2)配置pptp vpn服務(wù)
主配置文件/etc/pptpd.conf
選項(xiàng)文件/etc/ppp /options.pptpd
帳號(hào)文件/etc/ppp/chap-secrets
pptpd –-help
specified in the config file (default config file: /etc/pptpd.conf).
可以看到pptp配置文件位于/etc/pptpd.conf
a.主配置文件/etc/pptpd.conf
先看看默認(rèn)配置
[root@localhost proc]#grep -v "#" /etc/pptpd.conf
option /etc/ppp/options.pptpd
logwtmp
localip 192.168.0.1
remoteip 192.168.0.234-238,192.168.0.245
可以看出VPNSERVER的虛擬ip為192.168.0.1
vpnclient獲取的ip段位192.168.0.234-192.168.0.245
b.選項(xiàng)配置文件/etc/ppp /options.pptpd
[root@localhost proc]# grep -v "#" /etc/ppp/options.pptpd
可配置DNS等
ms-dns 8.8.8.8
c.賬號(hào)文件/etc/ppp/chap-secrets
# client server secret IP addresses
osvpnuser01 ppptpd 123456 *
test pptpd 1234 *
賬號(hào) 服務(wù)名(在option.pptpd)密碼 可登錄ip(*表示沒(méi)限制)
d.啟動(dòng)pptpdvpn并設(shè)置開(kāi)機(jī)啟動(dòng),并開(kāi)啟ip_forward(因?yàn)橄旅嬉褂玫絠ptables)
1)開(kāi)啟ip_forward
修改/etc/sysctl.conf文件的ip_forward=1
vi /etc/sysctl.conf
然后使其生效
sysctl –p
2)開(kāi)啟pptpvpn并開(kāi)機(jī)啟動(dòng)
[root@MiWiFi-R1D ~]# service pptpd start
Starting pptpd: [ OK ]
chkconfig開(kāi)機(jī)啟動(dòng)服務(wù)
[root@MiWiFi-R1D ~]# chkconfig –level 345 pptpd on
[root@MiWiFi-R1D ~]# chkconfig –list|grep pptpd
pptpd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
我們可以看到
netstat nltp |grep pptpd 可以看到 1723端口
[root@localhost proc]# netstat -nltp|grep pptpd
tcp 0 0 0.0.0.0:1723 0.0.0.0:* LISTEN 4427/pptpd
—————-到這里 ,pptpvpn部分配置完成!??!路由和iptables部分我們稍后配置
2.配置VPSclient,假如我們客戶(hù)端也為centos 5.5 linux的pptp client稍微復(fù)雜點(diǎn)
1)需要裝ppp,pptp.src.rpm包含pptp和pptp-debuginfo
檢查是否有ppp
rpm -qa|grep ppp
檢查是否安裝pptp
[root@localhost ~]# rpm -qa|grep pptp
pptp-debuginfo-1.7.2-3
pptp-1.7.2-3
a.安裝ppp直接
yum install ppp
b.而安裝pptp和pptp-debuginfo
下載pptp-1.7.2-3.rhel5.src.rpm 源碼rpm包安裝,解決依賴(lài)關(guān)系
#wget http://nchc.dl.sourceforge.net/project/pptpclient/pptp/pptp-1.7.2/pptp-1.7.2-3.rhel5.src.rpm
#rpmbuild pptp-1.7.2-3.rhel5.src.rpm #.src.rpm包的安裝方法
#cd /usr/src/redhat/RPMS/x86_64
[root@localhost x86_64]# ls
pptp-1.7.2-3.x86_64.rpm pptp-debuginfo-1.7.2-3.x86_64.rpm
#rpm –ivh 安裝這兩個(gè)rpm包
2)pptp vpn client端配置
你會(huì)發(fā)現(xiàn)可以使用pptpseyup命令進(jìn)行客戶(hù)端配置
#pptpsetup –create mytesevpn –server 192.168.31.131 –username test –password 1234
#cd /etc/ppp/peers
[root@localhost ~]# cat /etc/ppp/peers/mytestvpn
# written by pptpsetup
pty "pptp 192.168.31.133 –nolaunchpppd"
lock
noauth
nobsdcomp
nodeflate
name test
remotename mytestvpn
ipparam mytestvpn
修改/etc/ppp/peers/mytestvpn
注釋掉noauth
添加
require-mppe-128
refuse-pap
refuse-chap
refuse-eap
refuse-mschap
3)連接vpn
#cp /usr/share/doc/ppp-2.4.4/scripts/pon /usr/sbin/
#cp /usr/share/doc/ppp-2.4.4/scripts/poff /usr/sbin/
#chmod +x /usr/sbin/pon /usr/sbin/poff
將這兩個(gè)命令復(fù)制到path環(huán)境下,
執(zhí)行pon mytestvpn撥號(hào)
[root@localhost /]# pon mytestvpn
[root@localhost /]# ficonfig ppp0
-bash: ficonfig: command not found
[root@localhost /]# ifconfig ppp0
ppp0 Link encap:Point-to-Point Protocol
inet addr:192.168.0.234 P-t-P:192.168.0.1 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1496 Metric:1
RX packets:6 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:60 (60.0 b) TX bytes:66 (66.0 b)
執(zhí)行poff mytestvpn 斷開(kāi)撥號(hào)
———————–客戶(hù)端vpn撥號(hào)完成,接下來(lái)就開(kāi)始介紹iptables配置
———–測(cè)試結(jié)果———————————————————-
我們可以看到
在VPS上我們只需要
iptables -t nat -A PREROUTING -d 192.168.31.133 -p tcp –dport 333 -j DNAT –to 192.168.0.234:22
iptables –t nat –A POSTROUTING –d 192.168.0.234 –p tcp –dport 22 –j SNAT –to 192.168.0.1
將內(nèi)網(wǎng)服務(wù)器的VPN對(duì)應(yīng)的IP端口映射出去,就能通過(guò)訪(fǎng)問(wèn)外網(wǎng)192.168.31:333訪(fǎng)問(wèn)到內(nèi)網(wǎng)了。
[root@MiWiFi-R1D ~]# iptables -t nat -A PREROUTING -d 192.168.31.133 -p tcp –dport 333 -j DNAT –to 192.168.0.234:22
[root@MiWiFi-R1D ~]# iptables -t nat -A POSTROUTING -d 192.168.0.234 -p tcp –dport 22 -j SNAT –to 192.168.0.1
測(cè)試結(jié)果
Connecting to 192.168.31.133:333…
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
Last login: Tue Dec 16 22:20:02 2014 from 192.168.0.1
[root@localhost ~]# ls
anaconda-ks.cfg Desktop install.log install.log.syslog
[root@localhost ~]# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:0C:29:8C:07:7D
inet addr:192.168.137.2 Bcast:192.168.137.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe8c:77d/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4769 errors:0 dropped:0 overruns:0 frame:0
TX packets:3344 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:455890 (445.2 KiB) TX bytes:409449 (399.8 KiB)
[root@localhost ~]#
===========下面擴(kuò)展====================
當(dāng)我擁有這樣一臺(tái)VPNCLIENT以后,假如他在DMZ區(qū),網(wǎng)段內(nèi)一大堆服務(wù)器,那么我們只需要在vpnclient代理所有vpn段ip到內(nèi)網(wǎng)的訪(fǎng)問(wèn)就能進(jìn)行登陸。
1.雙重映射,內(nèi)網(wǎng)vpn客戶(hù)端192.168.137.2映射一次,然后再通過(guò)vps這vpn服務(wù)器映射一次
先在vpnclient映射一次,比如192.168.137.1的3389端口
1)vpn client端
[root@MiWiFi-R1D ~]# iptables -t nat -A PREROUTING -d 192.168.0.234 -p tcp –dport 3389 -j DNAT –to 192.168.137.1:3389
[root@MiWiFi-R1D ~]# iptables -t nat -A POSTROUTING -d 192.168.137.1 -p tcp –dport 3389 -j SNAT –to 192.168.137.2
2)vpn server端
[root@MiWiFi-R1D ~]# iptables -t nat -A PREROUTING -d 192.168.31.133 -p tcp –dport 3389 -j DNAT –to 192.168.0.234:3389
[root@MiWiFi-R1D ~]# iptables -t nat -A POSTROUTING -d 192.168.0.234 -p tcp –dport 3389 -j SNAT –to 192.168.0.1
3)于是乎流量就是這樣
192.168.31.133:3389>192.168.0.234:3389>192.168.137.1:3389
2.使用通過(guò)這臺(tái)內(nèi)網(wǎng)vpn客戶(hù)端(192.168.137.2)進(jìn)內(nèi)網(wǎng)
1)開(kāi)啟ip_forward
修改/etc/sysctl.conf文件的ip_forward=1
vi /etc/sysctl.conf
然后使其生效
sysctl -p
[root@localhost ~]# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
2)用到的工具還是我們的iptables
這里需要在client上做SNAT
iptables -t nat -A POSTROUTING -d 192.168.137.0/24 -j SNAT –to 192.168.137.2
[root@localhost ~]# iptables -t nat -L|grep 192.168.137.0
SNAT all — anywhere 192.168.137.0/24 to:192.168.137.2
3)到vpn Server添加靜態(tài)路由
route add -net 192.168.137.0 netmask 255.255.255.0 gw 192.168.0.234192.168.137.0 192.168.0.234
[root@MiWiFi-R1D ~]# route –n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.137.0 192.168.0.234 255.255.255.0 UG 0 0 0 ppp0
4)我們只需要客戶(hù)端接入vpn就能鏈接內(nèi)網(wǎng)所有機(jī)器了
流量導(dǎo)向 最終客戶(hù)機(jī)>—–vpn—->vpn網(wǎng)關(guān)(vpnserver)>內(nèi)網(wǎng)vpn客戶(hù)端>—iptables—->192.168.137.0/24
http://www.360doc.com/content/11/0416/17/2104556_110100707.shtml
http://os.51cto.com/art/201003/191707.htm
下一篇: OpenSSL原理及基本使用