Top

vpn客户端

目录:

PPTP

前期准备工作

设置路由器的VPN服务器

华硕路由器(RT-AC88U)设置VPN服务,PPTP:
验证MS-CHAPv2、MPPE加密MPPE-128,客户端IP地址:192.168.25.2~31(此款路由器仅支持30个客户)。

验证VPN服务器

先使用Windows10验证此VPN服务是否能正常使用。
拨号前客户端电脑的路由表:
C:\Users\李大鹏>route print
===========================================================================
接口列表
  4...2c fd a1 ae 29 29 ......Realtek PCIe GbE Family Controller
 22...d4 6d 6d f4 b9 b5 ......Intel(R) Wireless-AC 9560 160MHz
 18...d4 6d 6d f4 b9 b6 ......Microsoft Wi-Fi Direct Virtual Adapter
 15...d6 6d 6d f4 b9 b5 ......Microsoft Wi-Fi Direct Virtual Adapter #2
  7...d4 6d 6d f4 b9 b9 ......Bluetooth Device (Personal Area Network)
  1...........................Software Loopback Interface 1
===========================================================================

IPv4 路由表
===========================================================================
活动路由:
网络目标        网络掩码          网关       接口   跃点数
          0.0.0.0          0.0.0.0   192.168.15.254   192.168.11.131     25
    59.41.253.168  255.255.255.248   192.168.15.254   192.168.11.131     26
        127.0.0.0        255.0.0.0            在链路上         127.0.0.1    331
        127.0.0.1  255.255.255.255            在链路上         127.0.0.1    331
  127.255.255.255  255.255.255.255            在链路上         127.0.0.1    331
      192.168.0.0    255.255.240.0            在链路上    192.168.11.131    281
   192.168.11.131  255.255.255.255            在链路上    192.168.11.131    281
   192.168.15.255  255.255.255.255            在链路上    192.168.11.131    281
        224.0.0.0        240.0.0.0            在链路上         127.0.0.1    331
        224.0.0.0        240.0.0.0            在链路上    192.168.11.131    281
  255.255.255.255  255.255.255.255            在链路上         127.0.0.1    331
  255.255.255.255  255.255.255.255            在链路上    192.168.11.131    281
===========================================================================
永久路由:
  无

IPv6 路由表
===========================================================================
活动路由:
 接口跃点数网络目标                网关
  1    331 ::1/128                  在链路上
  1    331 ff00::/8                 在链路上
===========================================================================
永久路由:
  无
客户端设置pptp从外网拨号到路由器,获取到的IP是192.168.25.3/32,默认网关为0.0.0.0。
从客户端电脑可以ping到路由器后面的NAS;从路由器上NAS也能ping到客户端电脑拨号获取到的IP。
客户端的路由表:
C:\Users\李大鹏>route print
===========================================================================
接口列表
 41...........................vpntest
 22...d4 6d 6d f4 b9 b5 ......Intel(R) Wireless-AC 9560 160MHz
 18...d4 6d 6d f4 b9 b6 ......Microsoft Wi-Fi Direct Virtual Adapter
 15...d6 6d 6d f4 b9 b5 ......Microsoft Wi-Fi Direct Virtual Adapter #2
  7...d4 6d 6d f4 b9 b9 ......Bluetooth Device (Personal Area Network)
  1...........................Software Loopback Interface 1
  4...2c fd a1 ae 29 29 ......Realtek PCIe GbE Family Controller
===========================================================================

IPv4 路由表
===========================================================================
活动路由:
网络目标        网络掩码          网关       接口   跃点数
          0.0.0.0          0.0.0.0   192.168.15.254   192.168.11.131   4250
          0.0.0.0          0.0.0.0            在链路上      192.168.25.3     26
    59.41.253.168  255.255.255.248   192.168.15.254   192.168.11.131   4251
      113.65.22.4  255.255.255.255   192.168.15.254   192.168.11.131   4251
        127.0.0.0        255.0.0.0            在链路上         127.0.0.1   4556
        127.0.0.1  255.255.255.255            在链路上         127.0.0.1   4556
  127.255.255.255  255.255.255.255            在链路上         127.0.0.1   4556
      192.168.0.0    255.255.240.0            在链路上    192.168.11.131   4506
   192.168.11.131  255.255.255.255            在链路上    192.168.11.131   4506
   192.168.15.255  255.255.255.255            在链路上    192.168.11.131   4506
     192.168.25.3  255.255.255.255            在链路上      192.168.25.3    281
        224.0.0.0        240.0.0.0            在链路上         127.0.0.1   4556
        224.0.0.0        240.0.0.0            在链路上    192.168.11.131   4506
        224.0.0.0        240.0.0.0            在链路上      192.168.25.3     26
  255.255.255.255  255.255.255.255            在链路上         127.0.0.1   4556
  255.255.255.255  255.255.255.255            在链路上    192.168.11.131   4506
  255.255.255.255  255.255.255.255            在链路上      192.168.25.3    281
===========================================================================
永久路由:
  无

IPv6 路由表
===========================================================================
活动路由:
 接口跃点数网络目标                网关
  1    331 ::1/128                  在链路上
  1    331 ff00::/8                 在链路上
===========================================================================
永久路由:
  无
对比之下,拨号后接口多出了vnptest,这是测试用的vpn连接; IPv4路由表中多出以下行:
          0.0.0.0          0.0.0.0            在链路上      192.168.25.3     26
      113.65.22.4  255.255.255.255   192.168.15.254   192.168.11.131   4251
     192.168.25.3  255.255.255.255            在链路上      192.168.25.3    281
        224.0.0.0        240.0.0.0            在链路上      192.168.25.3     26
  255.255.255.255  255.255.255.255            在链路上      192.168.25.3    281 
以上:

使用debian连接vpn服务器

需要安装pptp-linux软件包:
# apt install pptp-linux
使用以下命令直接连接vpn:
root@X61s:/etc/ppp# pptpsetup --create nas --server 路由器IP或域名 --username vpn账号 --password vpn密码 --encrypt --start
Using interface ppp0
Connect: ppp0 <--> /dev/pts/1
CHAP authentication succeeded
MPPE 128-bit stateless compression enabled
local  IP address 192.168.25.2
remote IP address 192.168.0.1

root@X61s:/etc/ppp# ip add
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 ......
5: ppp0:  mtu 1446 qdisc pfifo_fast state UNKNOWN group default qlen 3
    link/ppp
    inet 192.168.25.2 peer 192.168.0.1/32 scope global ppp0
       valid_lft forever preferred_lft forever
此命令会在/etc/ppp/目录中修改一个文件并生成一个文件: 由于pptpsetup命令并没有生成新的网络接口,所以不能使用ifdownifup命令来操作ppp0。并且系统重启后不会自动拨号。
编辑/etc/network/interface,加入以下行:
# vpn
auto ppp0
iface ppp0 inet ppp
provider nas
使用ifup ppp0即可令其拨号,且重启电脑后会自动拨号。

完成拨号后可以ping到华硕路由器的内网ip,并能从浏览器访问华硕路由器内网管理界面。但ping不到华硕路由器后面的内网设备。
查看路由表:
root@X61s:~# ip route
default via 192.168.15.254 dev enp0s25 onlink
113.65.22.4 via 192.168.15.254 dev enp0s25 src 192.168.5.169
169.254.0.0/16 dev enp0s25 scope link metric 1000
192.168.0.0/20 dev enp0s25 proto kernel scope link src 192.168.5.169
192.168.0.1 dev ppp0 proto kernel scope link src 192.168.25.2
使用traceroute命令可以看到访问其他网站是从原有网关出去的:
root@X61s:~# traceroute www.163.com
traceroute to www.163.com (113.106.97.216), 30 hops max, 60 byte packets
 1  192.168.15.254 (192.168.15.254)  0.267 ms  0.191 ms  0.193 ms
 2  1.208.140.61.broad.gz.gd.dynamic.163data.com.cn (61.140.208.1)  3.126 ms  3.196 ms  3.232 ms
 3  183.57.162.29 (183.57.162.29)  6.464 ms 121.33.240.125 (121.33.240.125)  4.114 ms 113.98.79.153 (113.98.79.153)  11.629 ms
 4  * 245.32.63.58.broad.gz.gd.dynamic.163data.com.cn (58.63.32.245)  6.635 ms *
 5  78.110.36.59.broad.dg.gd.dynamic.163data.com.cn (59.36.110.78)  7.483 ms 66.110.36.59.broad.dg.gd.dynamic.163data.com.cn (59.36.110.66)  8.082 ms 183.61.221.234 (183.61.221.234)  7.578 ms
 6  119.146.185.66 (119.146.185.66)  7.517 ms 113.107.218.146 (113.107.218.146)  11.612 ms 183.6.200.138 (183.6.200.138)  8.937 ms
 ......
说明仅仅是连上了这个vpn,所有流量都没有从vpn服务器(即华硕路由器)经过。
在/etc/ppp/peer/nas文件中添加两行:
defaultroute
replacedefaultroute
然后使用traceroute命令:
root@X61s:~# traceroute www.163.com
traceroute to www.163.com (113.106.97.216), 30 hops max, 60 byte packets
 1  192.168.0.1 (192.168.0.1)  4.991 ms  5.742 ms  5.840 ms
 2  113.65.22.1 (113.65.22.1)  50.592 ms  50.521 ms  50.484 ms
 3  218.19.217.225 (218.19.217.225)  9.552 ms 113.98.79.129 (113.98.79.129)  10.680 ms 14.147.8.246 (14.147.8.246)  11.135 ms
 4  14.147.4.229 (14.147.4.229)  10.792 ms * *
 ......
可以看到第一跳是192.168.0.1,即华硕路由器的内网IP,第二跳是113.65.22.1,与在华硕路由器上执行traceroute时的第一跳相同。
说明客户端电脑所有访问外部网络的流量都是走华硕路由器出去的。
在debian客户端电脑上执行以下命令:
# w3m http://members.3322.org/dyndns/getip
看到显示的IP地址为113.64.22.4,也说明数据流是从华硕路由器进出的。
此时路由表内容如下:
root@X61s:~# ip route
default dev ppp0 scope link
113.65.22.4 via 192.168.15.254 dev enp0s25 src 192.168.5.169
169.254.0.0/16 dev enp0s25 scope link metric 1000
192.168.0.0/20 dev enp0s25 proto kernel scope link src 192.168.5.169
192.168.0.1 dev ppp0 proto kernel scope link src 192.168.25.2

经测试,若客户机所在的网络(例如:192.168.15.*/24)与华硕路由器内网的网络(例如:192.168.0.*/24)不在同一个子网中,PPTP拨号获取到的IP也不在其中任意一个网段(例如:192.168.25.*),则客户机拨号成功后可以访问华硕路由器后面的局域网中的资源。
但如果客户机所在网络与华硕路由器的内网网络有重合,比如,一个是192.168.0.0/24,一个是192.168.0.0/20,则客户机不能访问华硕路由器的内部网络资源。
Windows10的vpn客户端却可以做到类似无缝连接的效果,推测跟路由表的跃点数有关。
使用以下命令添加路由表条目:
# ip route add 192.168.0.0/24 dev ppp0 scope link metric 25
可以访问华硕路由器后面的资源,但是无法访问本地192.168.0.*的资源。

OpenVPN

OpenVPN号称是这三个里面最安全的,而且其端口号可以随意更改,能较大程度避免被封端口。
但是OpenVPN最大的不足是,一般的系统不带相应的软件,需要安装客户端。而且有些路由器也不支持它。
OpenVPN服务器端设置可能比较复杂,但对于内置了OpenVPN的成品路由器来说一般都比较简单,只需要启用它,设置服务器端口、账号密码即可。
设置完成后需要将OpenVPN生成的客户端配置文件(一般是以.ovpn为后缀)导出来给客户端使用。

对于debian客户端,需要安装openvpn:
# apt install openvpn
然后将路由器导出的client.ovpn文件复制到指定的目录中,执行以下命令即可连接:
# openvpn --config /home/lidapeng/client.ovpn
连接后会要求输入账号密码,验证成功后即可连上。
连上后也会出现类似PPTP的状况:若客户端的网段与华硕路由器后面的网段设置有重叠,客户端会将本地内网忽略掉。
OpenVPN的服务器端和客户端可设置的参数很多,可能有解决方法,待后续研究。

每次连接都需要交互式输入账号密码,无法做到自动连接。
先创建一个账号密码文件,如pass.txt,此文件有两行,第一行是openvpn账号,第二行是密码。
然后修改clinet.ovpn文件的auth-user-pass行,后面加上pass.txt的绝对路径:
auth-user-pass /home/lidapeng/pass.txt

接下来尝试将openvpn-client做成服务。
按frpc做法,将openvpn。
/lib/systemd/system/目录下有四个和openvpn相关的文件: 先将client.ovpn和pass.txt文件复制到此目录下:
# cp /home/lidapeng/openvpn/client.ovpn /lib/systemd/system/
# cp /home/lidapeng/openvpn/pass.txt /lib/systemd/system/
修改client.ovpn文件中auth-user-pass行,将密码文件的路径指向当前位置(注意必须是绝对路径)。

然后以openvpn-client@.service为范本制作服务脚本:
# cd /lib/systemd/system
# cp openvpn-client@.service ovc2home.service
# vi ovc2home.service
(修改ExecStart=行)
ExecStart=/usr/sbin/openvpn --suppress-timestamps --nobind --config /lib/systemd/system/client.ovpn
执行以下命令使此服务开机自动启动:
root@X61s:~# systemctl enable ovc2home
Created symlink /etc/systemd/system/multi-user.target.wants/ovc2home.service → /lib/systemd/system/ovc2home.service.

在FreeBSD下安装配置OpenVPN客户端

需要安装openvpn:
# pkg install openvpn
然后按以下步骤操作: 目前还没找到方法将此客户端加入到服务中。

以下示例,使用FreeBSD14.1通过OpenVPN连接爱快路由器。
首先在FreeBSD上安装openvpn:

# pkg install openvpn
安装程序不会在/usr/local/etc/目录下创建配置文档,可参考/usr/local/share/examples/openvpn/目录下包含一些可供参考的文件。本例中未使用。
在爱快的管理界面,进入:认证计费→本地认证计费服务→OpenVPN服务端。依次更改如下设置: 然后点击页面下方的【保存】,记得要勾选【开启】OpenVPN服务。
完成以上设置后,点击【导出Windows客户端配置】,会下载一份名为OpenVPN-Client.conf的文档,用写字板打开它,复制所有内容。
然后在FreeBSD客户机上创建文件/usr/local/etc/openvpn/client.conf(注意,openvpn目录不存在,需要自己建),将剪贴板里的内容复制进去。
client.conf文件中,dev tunx需要修改为dev tun。remote根据实际情况决定是否需要修改。
修改/etc/rc.conf文件,加入以下行:
openvpn_enable="yes"
openvpn_if="tun"
openvpn_configfile="/usr/local/etc/openvpn/client.conf"
启动FreeBSD的openvpn服务,若拨号成功,使用ifconfig命令可以看到tun0。
如果拨号失败,可以使用tail监视/var/log/messages查看问题。
注意,如果使用密钥登录,在爱快的管理界面的认证计费里的【账号在线用户】里面是看不到客户端登录连接情况的,需要去日志中心的【用户日志】→【认证日志】中查看。


IPSec