当我们下班或者出差时,偶尔会有需求需要访问公司内网中的服务,比如代码仓库等。
除了使用远程桌面到办公电脑操作外,还可以考虑使用OpenVPN连通公司网络,无缝访问公司内网的服务。
原理
公司局域网中的某台机器作为OpenVPN客户端连接到OpenVPN网络,然后配置成网关;OpenVPN服务端将相关IP路由到这个OpenVPN客户端,转发流量。
Windows与Linux配置方法稍微有些不同,下面会给出。
目标
如下图所示,我们的目标是用家庭网络中的笔记本电脑(192.168.31.103)直接访问公司局域网中的代码仓库(192.168.1.100)
安装
OpenVPN的安装教程可以参考我之前的文章
juejin.cn/post/735715...
确保OpenVPN正常可用后,才能使用OpenVPN打通异地网络。
服务端配置
路由配置
编辑 /etc/openvpn/server.conf
加入以下配置
perl
client-to-client #启用客户端点对点,即两个客户端可以相互访问
route 192.168.1.0 255.255.255.0 #指示openvpn负责该子网的路由
push "route 192.168.1.0 255.255.255.0" #设置客户端的路由表,该子网路由到openvpn
配置好后重启即可。
ccd配置
我们需要前往/etc/openvpn/ccd/
创建用户配置文件。该目录负责每个用户不同的路由规则,一个用户一个文件(如/etc/openvpn/ccd/user
)。
假设我们创建了一个openvpn用户company
给电脑1(192.168.1.212)使用,我们需要前往/etc/openvpn/ccd/
,添加或者修改company
文件,添加以下内容:
perl
ifconfig-push 10.8.0.12 255.255.255.0 #设置静态IP,这个可选
iroute 192.168.1.0 255.255.255.0 #连接后通知OpenVPN服务端该子网由该客户端负责
系统配置
接下来我们需要启用操作系统的路由转发功能,从而使家有网络中的请求路由到公司网络中。
Windows
- 打开注册表编辑器,前往
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
找到IPEnableRouter
项,修改为1
- 打开
services.msc
,启用Routing and Remote Access
服务,启动类型
选择自动或手动,然后点击服务状态
下的启动即可 - 最后还需要启动网卡共享,将物理网卡共享给OpenVPN的虚拟网卡
Linux
linux较为简单(^o^乐),一条命令即可
css
sudo iptables -t nat -A POSTROUTING -o ens34 -j MASQUERADE
这边补充两个点
- ens34是ubuntu默认的网卡名,需要改成自己的服务器的默认网卡名
- ubuntu默认是不允许路由转发的,要先执行
ufw disable
,或者单独配置允许路由转发功能。
验证
- 重启OpenVPN服务器
systemctl restart openvpn
- 客户端均重新连接,注意公司和家庭中的OpenVPN客户端使用不同的用户,如
home
与company
使用ping校验