IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    烂泥:openvpn tun模式下客户端与内网机器通信

    lanni2460发表于 2015-08-02 01:00:00
    love 0

    本文由秀依林枫提供友情赞助,首发于烂泥行天下

    前两篇文章我们介绍了有关openvpn的搭建与配置文件的讲解,这篇文章我们再聊介绍下,在tun模式下openvpn客户端如何与内网机器通信的问题。

    一、实际问题

    先来介绍下目前的基本情况,如下:

    1、openvpn服务器单网卡,通过硬件防火墙把openvpn服务器的1194端口映射到公网。

    2、openvpn服务器所在的网段为192.168.5.1/24网段

    3、openvpn客户端获得IP地址为10.8.0.1/24网段

    要求10.8.0.1/24网段能访问192.168.5.1/24网段的服务器。

    通过前两篇文章,可知我们现在的openvpn客户端已经可以正常连接openvpn服务器,但是还不能和公司内网的其他机器进行正常通信。如下:

    烂泥:openvpn tun模式下客户端与内网机器通信 - 第1张  | 烂泥行天下

    如果openvpn服务器使用的是tap桥接模式的话,这个问题很容易解决,只需要在openvpn服务器端通过修改openvpn配置文件server.conf,向客户端推送公司内网的IP地址段即可。

    但是目前,我们公司使用的是tun模式,所以需要通过其他手段进行解决。

    其实要解决这个问题,我们只需要进行如下两步操作,就可以解决这个问题。

    第一步、修改openvpn配置文件,向客户端推送192.168.5.1/24网段的路由。(此步可以省略)

    第二步、配置IPtables规则。

    注意:以上两步操作,第一步操作可以没有,但是配置IPtables规则这一步操作一定不能少。否则客户端还是无法与内网机器正常通信。

    下面我们详细介绍这两步的操作。

    二、openvpn服务器配置

    在《烂泥:openvpn配置文件详解》这篇文章中,我们详细介绍了有关openvpn的server.conf配置文件,我们现在需要做的就是把192.168.5.1/24网段路由推送到客户端。具体配置如下:

    push "route 192.168.5.0 255.255.255.0"

    烂泥:openvpn tun模式下客户端与内网机器通信 - 第2张  | 烂泥行天下

    修改完毕后,我们要重启openvpn,如下:

    sudo /etc/init.d/openvpn restart

    烂泥:openvpn tun模式下客户端与内网机器通信 - 第3张  | 烂泥行天下

    有关openvpn需要修改的配置就这么多,下面开始配置IPtables规则。

    三、配置IPtables规则

    现在我们开始配置IPtables规则,我们需要做的就是把所有来自10.8.0.1/24网段的请求,全部通过openvpn服务器的eth0网卡转发出去,也就是我们平时所说的IPtables的NAT规则。

    注意:IPtables规则是在openvpn服务器进行配置的,而不是openvpn客户端。

    IPtables NAT规则如下:

    sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

    sudo iptables -nL -t nat

    烂泥:openvpn tun模式下客户端与内网机器通信 - 第4张  | 烂泥行天下

    以上修改完毕后,我们启动openvpn客户端,看看是否可以与192.168.5.1/24网段机器进行通信。

    四、测试网段之间的通信

    在openvpn客户端ping192.168.5.1/24网段机器,如下:

    ping 192.168.5.140

    烂泥:openvpn tun模式下客户端与内网机器通信 - 第5张  | 烂泥行天下

    telnet 192.168.5.4 22

    烂泥:openvpn tun模式下客户端与内网机器通信 - 第6张  | 烂泥行天下

    通过以上两张图,我们可以看出现在openvpn客户端已经和内网机器正常通信。

    以上就是有关openvpn tun模式下客户端与内网机器通信的配置过程。

    在实际使用openvpn过程中,我们可能还会遇到以下还有几个问题,再此我们给出相应的openvpn配置。

    五、翻墙的配置

    有时候为了能去国外看看,我们会购买国外的服务器,搭建openvpn然后利用这台服务器进行翻墙。

    在openvpn配置中,我们只需要在openvpn服务器的server.conf配置中,开启push "redirect-gateway def1 bypass-dhcp"项即可。如下:

    push "redirect-gateway def1 bypass-dhcp"

    烂泥:openvpn tun模式下客户端与内网机器通信 - 第7张  | 烂泥行天下

    此时openvpn客户端拨号后,就会发现已经国外的IP。如下:

    烂泥:openvpn tun模式下客户端与内网机器通信 - 第8张  | 烂泥行天下

    通过上图,我们可以很明显的看到现在IP地址已经国外的了。具体如何使用,你懂的,呵呵。

    六、openvpn客户端linux开机启动问题

    因为项目需求,需要一台服务器开机就要连接,远程的openvpn服务器。如果是windows系统的很简单,配置下就可以了。

    而在linux系统下只需要把openvpn客户端连接openvpn服务器的命令写入到/etc/rc.local文件中即可。如下:

    cat /etc/rc.local

    烂泥:openvpn tun模式下客户端与内网机器通信 - 第9张  | 烂泥行天下

    但是有一点需要特别注意,就是openvpn客户端的配置文件中有关从CA证书、客户端的证书以及客户端密钥文件,一定要写成绝对路径,而不是相对路径,如下:

    烂泥:openvpn tun模式下客户端与内网机器通信 - 第10张  | 烂泥行天下

    同时如果是centos系统的话,一定不要配置成在/root/目录下开机启动openvpn客户端连接openvpn服务器。

    因为经过多次测试,这样是不能开机openvpn客户端连接openvpn服务器的。

    七、给客户端指定IP地址

    有时候为了实际项目的需求,需要给客户端指定IP地址。那么就可以通过修改openvpn服务器的配置来达到这个要求。

    只需要把server.conf文件中的开启client-config-dir ccd,然后在/etc/openvpn目录下创建ccd目录。如下:

    烂泥:openvpn tun模式下客户端与内网机器通信 - 第11张  | 烂泥行天下

    烂泥:openvpn tun模式下客户端与内网机器通信 - 第12张  | 烂泥行天下

    然后再在ccd目录下根据不同的客户端创建对应的文件,并在文件中写入如下内容:

    ifconfig-push 10.8.0.200 255.255.255.0

    烂泥:openvpn tun模式下客户端与内网机器通信 - 第13张  | 烂泥行天下

    以上的意思就是为client这个客户端指定IP地址为10.8.0.200。

    现在我们重新启动openvpn服务器,然后客户端进行连接。如下:

    烂泥:openvpn tun模式下客户端与内网机器通信 - 第14张  | 烂泥行天下

    通过上图,我们可以很明显的看出。客户端获得的IP地址确实为10.8.0.200。

    PS:以上执行是在linux系统上,经过测试发现在windows下如果给客户端指定IP地址的话会报错。猜想这可能是一个BUG。



沪ICP备19023445号-2号
友情链接