本文由ilanniweb提供友情赞助,首发于烂泥行天下
想要获得更多的文章,可以关注我的微信ilanniweb。
前段时间写了一篇有关openvpn搭建与内网机器通信的文章,那篇文章是基于服务器单网卡进行配置的,文章链接为《烂泥:openvpn tun模式下客户端与内网机器通信》。
这篇文章我们再来介绍下双网卡openvpn客户端与内网机器通信的配置。
一、需求说明
为什么要写openvpn双卡的配置?
是因为一般IDC机房都是提供多网卡服务器,同时目前比较流行的云服务器阿里云提供的也是双网卡,而腾讯云以及亚马逊的aws都是单网卡。各个云服务器商的网卡配置个数,如下图:
二、业务要求
现在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
上述openvpn服务配置文件中,push “route 10.10.1.0 255.255.255.0”这条命令一定要有,它是推送给客户端的路由配置。
五、IPtables配置
openvpn配置完毕后,我们现在开始配置openvpn服务器的IPtables规则。
现在服务器的网卡配置如下:
ifconfig
通过上图,我们可以看到网卡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这个网卡发出。
也可以直接修改iptables的配置文件,如下:
-A POSTROUTING -s 10.8.0.0/24 -o em2 -j SNAT –to-source 10.10.1.17
然后重新加载iptables规则。
如果是centos系统的话,直接使用/etc/init.d/iptables restart命令重启iptables。
如果是ubuntu系统的话,使用sudo iptables-restore /home/Ubuntu/iptables.rule。
六、测试通信情况
openvpn服务与iptables规则都配置完毕后,现在我们切换到客户端进行测试。
客户端连接openvpn服务器,如下:
openvpn –config lianzhou.ovpn &
通过上图,我们可以很明显的看出客户端已经正确连接openvpn服务器,并且获得10.8.0.6这个IP地址。
现在我们再来测试它与10.10.1.0/24网段的连通情况,如下:
ping 10.10.1.12
通过上图,我们可以很明显的看到客户端已经可以与10.10.1.12正常通信。
现在我们再来尝试连接下10.10.1.12这台机器,如下:
telnet 10.10.1.12 22
通过上图,我们可以很明显的看出客户端已经可以连接10.10.1.12这台服务器。
如果客户端在连接内网服务器中出现如下的错误提示:
telnet: Unable to connect to remote host: No route to host
这个一般是openvpn服务器的iptables规则不正确导致的,建议是先使用iptables –F命令清除iptables规则保留nat规则进行调试。
未经允许不得转载:烂泥行天下 » 烂泥:openvpn双网卡客户端与内网机器通信