最近在研究公网访问私内网云应用的实现手段,有了点小心得,特此记录下。
先说下工作环境:Citrix XenServer 5.6 FP1,Citrix XenCenter
最终效果:内网虚拟机可以访问外网服务,外网可以访问内网虚拟机
效果截图:
实现步骤:
1、通过XenCener创建“External NetWork”
点击pool(比如devPool)→Network→External Network,输入好Name,然后选择NIC为NIC 0,假设网络的名字为virtual_router
2、通过模板创建一个名为Router的虚拟机
选择模板为"Demo Linux"(其实一个Debian Linux),然后增加2个网卡,一个网卡连接到"Network 0",另一个网卡连接到“virtual_router"
3、启动Router后并编辑 /etc/network/interface
#配置lo
auto lo
iface lo inet loopback
#配置eth0
auto eth0
iface eth0 inet static
#10.4.44.179为外网IP地址
address 10.4.44.179
netmask 255.255.255.0
gateway 10.4.44.1
#配置eth1
auto eth1
iface eth1 inet static
address 192.168.22.254
netmask 255.255.255.0
4、配置端口转发及防火墙配置
#允许ip转发
echo "1" > /proc/sys/net/ipv4/ip_forward
#可以将下面的内容保存为一个bash文件来执行
#保存为bash文件需要执行chmod 744 file
#bash文件可以在/etc/rc.local中引入
#!/bin/bash
iptables="/sbin/iptables"
$iptables --flush
$iptables --table nat --flush
$iptables --delete-chain
$iptables -I INPUT -p all -j ACCEPT
#内网外网实现
$iptables -t nat -A POSTROUTING -o eth0 -s 192.168.22.0/24 -j SNAT --to-source 10.4.44.179
#外网访问内网实现,将外网IP的5000好端口转发到虚拟机的3389端口
$iptables -t nat -A PREROUTING -i eth0 -p tcp -d 10.4.44.179 --dport 5000 -j DNAT --to-destination 192.168.22.2:3389
$iptables -A FORWARD -j ACCEPT
5、新建虚拟机并配置好IP
新建一个名为TestNAT的虚拟机,并连接到网络"virtual_router",设置虚拟机的ip地址为192.168.22.2,网关为为192.168.22.254,如果是windows请开启远程访问
6、访问
访问10.4.44.179:5000,就能连接到192.168.22.2:3389,内网访问外网也可以成功访问。
参考资料: