需求


有2个在不同地方的IDC机房,2个机房需要链接对方的内网。拓扑见下图。ServerA想直接访问到ServerB连接的私有网络

                                          |

+-----------+   外网       +-------------+ |两个机器通过内网相互访问

+  Server A + <----------> +  Server B   + |

+-----------+              +-------------+ |  192.168.200.0/24

111.7.132.43              120.210.196.42  |

实现

通过ip tunnel建立ipip隧道,再通过iptables进行nat,便可以实现。

Step 1. 建立ip隧道

  ServerA配置iptunnel,并给tunnel接口配置上ip

  /sbin/modprobe ip_ipip

  /sbin/ip tun add iptun_hj mode ipip local 111.7.132.43 remote 120.210.196.42 ttl 32

  /sbin/ifconfig iptun_hj 192.168.200.1/24 up

 ServerB配置iptunnel,并给tunnel接口配置上ip

  /sbin/modprobe ip_ipip

  /sbin/ip tun add hj_iptun mode ipip local  120.210.196.42 remote 111.7.132.43 ttl 32

  /sbin/ifconfig hj_iptun 192.168.200.2/24 up

隧道配置完成后,请在ServerA上192.168.200.2,看是否可以ping通,ping通则继续,ping不通需要再看一下上面的命令执行是否有报错


Step 2. 添加路由和nat

ServerA上,添加到192.168.200.0/30的路由

/sbin/route add -net 192.168.200.0/24 gw 192.168.200.2

ServerB上,添加iptables nat,将ServerA过了访问192.168.200.0/24段的包进行NAT,并开启ip foward功能

  iptables -t nat -I POSTROUTING -s 192.168.200.0/24  -j MASQUERADE

  echo "1" > /proc/sys/net/ipv4/ip_forward

或者:

  sysctl -w net.ipv4.ip_forward=1

  sed -i '/net.ipv4.ip_forward/ s/0/1/'  /etc/sysctl.conf


至此,完成了两端的配置,ServerA可以直接访问ServerB 所接的私网了。


需要特定网络走私网出去,需要使用到ip rule和ip route.