先说需求:类似Hamachi,将不同物理地域的主机进行链路层互联,实现客户端之间、客户端和服务器之间的链路层互联和广播,其它啰里八嗦的话在L2TP方案废稿里,就不再打一遍了(那篇先写,但是方案有问题就废弃了)。

OpenVPN的二层模式(TAP)区别于L2TP(以及PPTP、IKE、SSTP等方式),客户端可以分配变长子网掩码IP,不仅仅是将不同客户端连接到同一个网络,而是更进一步,将客户端直接在二层连入本地的有线局域网络(同一个广播域)。

本文使用pfSense防火墙自带的OpenVPN服务。

服务端配置

服务端要做两件事:创建服务、签发客户端证书,需要注意的有以下几个地方:

  1. 创建服务的时候,可以先用创建向导添加一台具备完整默认配置的服务器,再对这个服务器进行修改,这样会比较省事;
  2. pfSense本身还具有CA功能,可以进行证书管理(证书签发、作废等功能);
  3. 一定要放行服务端口(默认是UDP 1194),并放行OpenVPN网络中的流量;
  4. 为不同的访客签发不同的证书,证书不再使用或者疑似泄漏时也要记得及时作废;
  5. 必须工作在二层模式(TAP)下才可以进行广播;
  6. 客户端拨入以后,会与服务端指定的内网接口二层直连。

创建完成后,就可以开始对这个新的服务进行修改了:

  1. Server Mode选择:Remote Access(SSL/TLS);
  2. Device Mode:必须二层TAP模式,3层无法进行广播;
  3. IPv4 Tunnel Network留空,二层用不到;
  4. TLS认证时,服务器、客户端必须使用相同的TLS Key,创建服务时可选择自动生成Key文件,并在生成以后把文件内容存到客户端;
  5. 客户端用到的CA证书、个人证书、私钥文件需要到System -> Cert. Manager -> Certificates里手工导出;
  6. TLS Key direction:服务端和客户端必须互补,即两端需要分别设置为0和1,也可都不设置,此时将使用双向模式;
  7. 如果开启加密算法协商,服务端、客户端需要拥有相同的算法;
  8. 客户端之间如果需要互访,必须勾选Inter-client communication。

客户端配置

客户端要做的事是创建配置文件、准备证书(测试客户端为一台win10,一台win8):

  1. 安装客户端软件;
  2. 打开软件的安装目录,将示例配置目录sample-config下的客户端示例client.ovpn文件复制到配置文件目录(可以在软件的选项菜单中的“高级”标签下找到,默认设置为C:\Users\用户名\OpenVPN\config,配置文件和证书都放在这个目录下);
  3. 从服务器配置界面拷出TLS Key,存成ta.key;
  4. 导出服务器的CA证书(文件名和配置文件里的ca cert.crt保持一致);
  5. 从服务器导出签发的证书和私钥(证书文件名和配置文件里的cert client1.crt保持一致,私钥文件名和配置文件里的key client1.key保持一致);
  6. 工作模式为tap。

client

#tap模式
dev tap

#多个TAP接口时,windows系统需要指定网卡名字
dev-node "OpenVPN TAP-Windows6"

#服务器地址、拨号端口和协议
proto udp
remote www.abc.com 1194

resolv-retry infinite

nobind

persist-key
persist-tun


#CA证书、个人证书、私钥对应的文件位置
ca ca.crt
cert client1.crt
key client1.key

remote-cert-tls server

#TLS KEY文件位置、加密算法
tls-auth ta.key 1
key-direction 1
auth SHA256
cipher AES-128-GCM

verb 3

客户端1,windows 10物理机

客户端2,运行于另一台物理机上的Vmware虚拟机,NAT模式,windows 8.1

联机测试

Client1为物理机A,Client2为物理机B上工作在NAT模式的VMWARE虚拟机。之所以这样,是为了进行彻底的网络隔离,避免干扰:

  • 物理机和本机虚拟机组网时,已经由NAT网卡直连;
  • 不同的物理机接到同一个交换机时,也是直连状态。

1. 客户端访问内网资源的测试

2. PING(客户端之间互访测试)

3. 远程桌面(客户端之间互访测试)

4. CS(客户端之间互访测试)

5. war3(客户端之间互访测试)

分类: articles