烂泥:openvpn双网卡客户端与内网机器通信

本文由ilanniweb提供友情赞助,首发于烂泥行天下

想要获得更多的文章,可以关注我的微信ilanniweb。

前段时间写了一篇有关openvpn搭建与内网机器通信的文章,那篇文章是基于服务器单网卡进行配置的,文章链接为《烂泥:openvpn tun模式下客户端与内网机器通信》。

这篇文章我们再来介绍下双网卡openvpn客户端与内网机器通信的配置。

一、需求说明

为什么要写openvpn双卡的配置?

是因为一般IDC机房都是提供多网卡服务器,同时目前比较流行的云服务器阿里云提供的也是双网卡,而腾讯云以及亚马逊的aws都是单网卡。各个云服务器商的网卡配置个数,如下图:

clip_image001[4]

clip_image002[4]

clip_image003[4]

二、业务要求

现在IDC机房那边有一台服务器配A配置的是双网卡,一块配置的是公网IP(173.33.141.50),一块配置的是内网IP(10.10.1.17)。另外在这个IDC机房内的其他服务器,为了安全起见,配置都是的内网IP10.10.1.0/24网段的。

现在要求很简单,通过服务器A管理内网的其他服务器。

三、解决方案

为了达到上述要求,我们可以在服务器A上搭建openvpn服务,然后客户端通过这台openvpn服务器作为跳板机管理内网服务器。

openvpn的搭建很简单,可以参考这篇文章《烂泥:ubuntu 14.04搭建OpenVPN服务器》。

这里有个难点就是客户端与内网服务器通信的问题。

openvpn客户端与内网服务器通信问题,如果是单网卡的话,我们只需要按照《烂泥:openvpn tun模式下客户端与内网机器通信》这篇文章进行操作即可。

那么服务器双网卡如何配置呢?

其实双网卡的配置,其实和单网卡的配置差不多,都是要修改openvpn服务的配置文件和配置iptables规则。只是iptables规则改变下了而已,下面我们实际配置下。

四、openvpn具体配置

openvpn服务配置文件内容如下:

grep -vE ‘^;|^$|^#’ /etc/openvpn/server.conf

port 1194

proto tcp

dev tun

ca ca.crt

cert ilanni.crt

key ilanni.key # This file should be kept secret

dh dh2048.pem

server 10.8.0.0 255.255.255.0

ifconfig-pool-persist ipp.txt

push “route 10.10.1.0 255.255.255.0”

push “dhcp-option DNS 223.5.5.5”

client-to-client

duplicate-cn

keepalive 10 120

comp-lzo

persist-key

persist-tun

status openvpn-status.log

log openvpn.log

verb 3

clip_image004[4]

上述openvpn服务配置文件中,push “route 10.10.1.0 255.255.255.0”这条命令一定要有,它是推送给客户端的路由配置。

五、IPtables配置

openvpn配置完毕后,我们现在开始配置openvpn服务器的IPtables规则。

现在服务器的网卡配置如下:

ifconfig

clip_image005[4]

通过上图,我们可以看到网卡em2是和内网进行通信的,我们现在需要做的就是把所有从openvpn客户端(10.8.0.0/24)请求到10.10.1.0/24网段的数据全部伪装成网卡em2(10.10.1.17)发出的。也就是说需要在iptables上做一个NAT规则。

命令如下:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o em2 -j SNAT –to-source 10.10.1.17

iptables -nL -t nat

上述命令的意思是把所有来自10.8.0.0/24网段的请求伪装成10.10.1.17这个IP地址,然后通过em2这个网卡发出。

clip_image006[4]

也可以直接修改iptables的配置文件,如下:

-A POSTROUTING -s 10.8.0.0/24 -o em2 -j SNAT –to-source 10.10.1.17

clip_image007[4]

然后重新加载iptables规则。

如果是centos系统的话,直接使用/etc/init.d/iptables restart命令重启iptables。

如果是ubuntu系统的话,使用sudo iptables-restore /home/Ubuntu/iptables.rule

六、测试通信情况

openvpn服务与iptables规则都配置完毕后,现在我们切换到客户端进行测试。

客户端连接openvpn服务器,如下:

openvpn –config lianzhou.ovpn &

clip_image008[4]

clip_image009[4]

通过上图,我们可以很明显的看出客户端已经正确连接openvpn服务器,并且获得10.8.0.6这个IP地址。

现在我们再来测试它与10.10.1.0/24网段的连通情况,如下:

ping 10.10.1.12

clip_image010[4]

通过上图,我们可以很明显的看到客户端已经可以与10.10.1.12正常通信。

现在我们再来尝试连接下10.10.1.12这台机器,如下:

telnet 10.10.1.12 22

clip_image011[4]

通过上图,我们可以很明显的看出客户端已经可以连接10.10.1.12这台服务器。

如果客户端在连接内网服务器中出现如下的错误提示:

telnet: Unable to connect to remote host: No route to host

clip_image012[4]

这个一般是openvpn服务器的iptables规则不正确导致的,建议是先使用iptables –F命令清除iptables规则保留nat规则进行调试。

未经允许不得转载:烂泥行天下 » 烂泥:openvpn双网卡客户端与内网机器通信

赞 (2) 打赏

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

支付宝扫一扫打赏

微信扫一扫打赏