由于工做中一个项目,总部与各个分部只有citrix服务器才能通信,总部客户端想经过分部citrix访问分部内网资源。基本思路,经过程序修改获取的ICA文件中的IP地址和端口,将修改后的ICA文件返回给客户端,实现客户端经过链接本地citrix,自动跳转到另一个网络的citrix。以前用的是haproxy,可是haproxy与程序交互不是很好,若是各个分部只有一台citrix服务器,事先静态写好还能够,可是通常分部会有多台citrix服务器,不能肯定每次使用的是哪台citrix服务器,这样想经过程序动态添加映射条目就比较难以实现。html
-----haproxy主要用于负载,若是只是负载一个,那就成为端口映射了,可是毕竟是linux下面的程序。linux
-----windows下也有一个小工具:portforward.exe,图形界面容易操做,我的日常使用能够,可是也没有办法实现与程序交互。windows
通过在网上搜索,发现windows系统,包括xp 2003,2008等,都自带portproxy功能。目前只支持tcp协议的端口转发,前提须要做为portproxy的主机须要安装IPV6,安装能够不启用IPV6。
A.配置方法
假定须要经过192.168.1.8的14941端口链接192.168.1.118的1494端口,则须要在192.168.1.8主机的命令行输入以下语句
netsh interface ipv6 install
netsh interface portproxy add v4tov4 listenaddress=192.168.1.8 listenport=14941 connectaddress=192.168.1.118 connectport=1494
---若是已经安装IPV6,第一条能够不须要
---若是操做系统开启了主机防火墙,须要放行TCP 14941的入站链接
---2008防火墙较之前版本有较大改动,能够参考以下连接:服务器
http://pcedu.pconline.com.cn/soft/virus/safe/0710/1130476.html
若是想取消上面配置的端口转发,能够用以下语句:
netsh interface portproxy delete v4tov4 listenaddress=192.168.1.8 listenport=33891
若是想查看已经配置了哪些端口转发,能够用以下语句:
netsh interface portproxy show v4tov4
B.优势
能够随时根据须要添加或删除端口转发条目,而且重启操做系统仍能自动保存以前的配置并自动启用,不像HAproxy修改完配置文件还需重启HAproxy。
网上有的说xp配置端口转发不起做用,估计是没有安装IPV6的缘故,用xp测试,安装了IPV6后能够实现端口转发,而且不须要开启路由和远程访问服务。
另外考虑到端口转发的冗余,能够多台主机都配置端口转发,且不用指定本地监听地址,这样能够经过操做系统提供浮动地址来实现冗余:
netsh interface portproxy add v4tov4 listenport=14941 connectaddress=192.168.1.118 connectport=1494
程序实现动态添加的时候,能够telnet到每台都添加条目,也能够只与虚地址联系,每次都检查是否有对应的映射条目(根据ica文件中须要链接的citrix服务器的IP地址来检查),若是没有则命令行添加,添加时要确保本地端口不能被占用,而且还须要考虑防火墙,用netsh添加入站端口访问规则。网络
----须要citrix主机开启telnet服务,并设置访问控制,只容许特定主机链接。tcp