需求
有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.