准备阶段:
本次使用的服务器都是centos7
1.服务器A    公网IP:1.1.1.1/24        私网IP:10.0.0.1/24
2.服务器B    公网IP:100.100.0.1/24    私网IP:10.0.0.2/24
3.服务器A和服务器B的私网互通
4.openVPN客户端    拨号地址:10.8.0.6

一、搭建客户端服务端

当服务器B和openVPN客户端之间的数据在公网传输时被拦截,在服务器A上配置openVPN服务(服务器A和客户端之间没有被拦截)。
openVPN客户端尝试连接,得到拨号地址10.8.0.6。如果显示连接失败或者openVPN服务端起不来就是配置文件的问题,哪边报错就是哪边的问题。

二、配置服务器A

1.开启流量转发
grep 'net.ipv4.ip_forward = 1'  /etc/sysctl.conf  ||  echo  'net.ipv4.ip_forward = 1'  >> /etc/sysctl.conf

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth1  -j MASQUERADE  #将10.8.0.0/24网段上的数据全走eth1网口
2.添加路由表
vim  /etc/iproute2/rt_tables 
添加一个   200  vpn

3.配置路由表规则
ip route  add 10.8.0.0/24  dev tun0  src  10.8.0.1  table  vpn  #添加一个路由规则到vpn表中,这条规则是vpn这个表中数据包默认使用源 IP 10.8.0.1 通过tun0 走网关10.8.0.0/24
ip route  add  10.0.0.0/24  dev  eth1  src  10.0.0.1  table  vpn
ip route  add  default via 10.0.0.2 dev eth1  table   vpn   ## 让eth1上的数据下一跳到达10.0.0.2

4.让所需网段使用该规则
ip rule add from 10.8.0.0/24 table vpn   #让10.8.0.0/24网段的所有IP 使用vpn表规则
注:上述配置路由表规则均非永久配置
5.永久配置(可替换3和4):
 vim /etc/rc.d/rc.local 
在该文件末尾加上
ip rule  add  from  10.8.0.0/24   table  vpn
ip route  add  10.0.0.0/24  dev  eth1  src  10.0.0.1  table  vpn
ip route  add  default via 10.0.0.2 dev eth1  table   vpn
添加完之后并给上执行权限
chmod +x /etc/rc.d/rc.local

三、配置服务器B

1.开启流量转发
grep 'net.ipv4.ip_forward = 1'  /etc/sysctl.conf  ||  echo  'net.ipv4.ip_forward = 1'  >> /etc/sysctl.conf

本文到此,已经解决了最开始提出的问题,也可以通过公网访问私网服务器了。

扩展:

如果服务器A在国内,服务器B在国外,在服务器上配置将服务器A转发来的流量转发出去,是否可以实现科学上网?

这是本人正在使用的一种方案,转载请标明出处。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐