Ubuntu建立vpn服务器实现共享网络

对于想要在外部访问内部的网络,除了在防火墙上开启相应服务器所对应的端口,最好的方法应该是建立VPN-Server,使得用户可以在外网任何一台计算机上拨入到内网中进行操作,而且VPN可以记录详细的日志,出现问题也便于追查相应的责任人。



在Ubuntu下配置VPN服务器也是比较简单的。

(1)首先更新自己的软件源。

sudo apt-get update

(2)安装pptpd软件。

sudo apt-get install pptpd

(3)安装完毕之后修改下面这三个配置文件

/etc/pptpd.conf //主要是对主机设置

/etc/ppp/pptpd-options //主要是对DNS的设置

/etc/ppp/chap-secrets //主要是设置VPN的用户

1.修改pptpd.conf文件

sudo vi /etc/pptpd.conf

在最下方添加如下配置:

localip 10.0.0.1

remoteip 10.0.0.2-10

#localip是主机的地址,remoteip是地址池,也就是远程拨进来的计算机所分配到的ip地址。

2.修改/etc/ppp/pptpd-options文件,设置DNS

sudo vi /etc/ppp/pptpd-options

改变其中的 ms-dns 选项,为 VPN 客户端指派 DNS 服务器地址。添加以下两行。

ms-dns 202.202.96.33

ms-dns 68.128.128.61

3.修改/etc/ppp/chap-secrets文件,添加用户

sudo vi /etc/ppp/chap-secrets

添加的时候一行一个用户。格式如下:

用户名 pptpd 密码 *

例如:mediciyan pptpd 123456

注明:pptpd是你的服务名,如果你没修改的话,就填这个。后面
处应该填的是客户端拨入时候分配的IP,如果填则代表启用DHCP服务,自动分配IP。

(4)现在重启pptpd服务应该是可以连接上了,但是,不能访问Internet。还需要设置IP转发。

(5)是否已经打开IP转发?
查看”/proc/sys/net/ipv4/ip_forward“文件中的值是否为”1“, 如果不是, 则需要在”/etc/sysctl.conf“文件中修改”net.ipv4.ip_forward=1“, 然后执行以下命令:

sudo sysctl -p //应用配置

sudo /etc/init.d/procps restart //重启服务

(6)有些时候,到这里就已经可以上外网了,但是像实验室的电脑,还需要设置NAT。这里需要用到iptables。

sudo apt-get install iptables

检查是否在VPN服务器上设置了对于客户端IP地址的NAT?
执行下面的命令查看表中是否有相应的表项:

sudo iptables –table nat -L POSTROUTING

如果没有则执行以下命令:

sudo iptables -t nat -A POSTROUTING -s 10.0.0.1/10 -o eth0 -j MASQUERADE

sudo iptables –table nat –append POSTROUTING –out-interface eth0 –jump MASQUERADE

一般来说,两条命令随便一句都可以。这时候重启pptpd服务,就可以上外网了。

(7)但是重启服务器之后,就不能上了。所以需要保存iptables。

方法是使用 iptables-save 命令:

sudo iptables-save > /etc/iptables-rules

然后修改 /etc/network/interfaces 文件,找到 eth0 那一节,在对 eth0 的

设置最末尾加上下面这句:

pre-up iptables-restore < /etc/iptables-rules

这样当网卡 eth0 被加载的时候就会自动载入我们预先用 iptables-save 保

存下的配置。

(8)到此,一个 VPN Server/Gateway 基本就算架设完毕。

当然,也许你按照我的方法做了,还是无法成功,那么下面总结一些我碰到的问题和解决方案:
无法建立 VPN 连接
安装好 pptpd 并设置后,客户端还是无法建立到服务器的连接。

造成的原因可能有以下几种:
1. 服务器端的防火墙设置:PPTP 服务需要使用 1723(tcp) 端口和 gre 协议,因此请确保您的防火墙设置允许这两者通行。
2. 如果服务器在路由器后面,请确保路由器上做好相应的设置和端口转发。
3. 如果服务器在路由器后面,那么请确保你的服务器支持 VPN Passthrough。
4. 如果客户端在路由器后面,那么客户端所使用的路由器也必须支持 VPN Passthrough。其实市面上稍微好点的路由器都是支持 VPN Passthrough 的,当然也不排除那些最最最便宜的便宜货确实不支持。当然,如果你的路由器可以刷 DD-Wrt 的话就刷上吧,DD-Wrt 是支持的。
能建立链接,但“几乎”无法访问互联网
这里我使用“几乎”这个词,是因为并不是完全不能访问互联网。症状为,打开 Google 搜索没问题,但其它网站均无法打开;SSH 可用,但 scp 不行;ftp 能握手,但传不了文件。我就遇到了这种情况,仔细 Google 后发现原来是 MTU 的问题,用 ping 探测了一下果然是包过大了。知道问题就好办了,我们可以通过 iptables 来修正这一问题。具体原理就不讲了,需要的自己 Google。这里只说解决方案,在 filter 表中添加下面的规则:
*sudo iptables -A FORWARD -s 10.0.0.0/24 -p tcp -m tcp –tcp-flags SYN,RST SYN -j TCPMSS –set-mss 1200


上面规则中的 1200 可以根据你的实际情况修改,为了保证最好的网络性能,这个值应该不断修改,直至能保证网络正常使用情况下的最大值。
好了,至此,一台单网卡 pptp-server 就算完成了。