因爲工作中一個項目,總部與各個分部只有citrix服務器才能通訊,總部客戶端想通過分部citrix訪問分部內網資源。基本思路,通過程序修改獲取的ICA文件中的IP地址和端口,將修改後的ICA文件返回給客戶端,實現客戶端通過連接本地citrix,自動跳轉到另外一個網絡的citrix。之前用的是haproxy,但是haproxy與程序交互不是很好,如果各個分部只有一臺citrix服務器,事先靜態寫好還可以,但是一般分部會有多臺citrix服務器,不能確定每次使用的是哪臺citrix服務器,這樣想通過程序動態添加映射條目就比較難以實現。
-----haproxy主要用於負載,如果只是負載一個,那就成爲端口映射了,但是畢竟是linux下面的程序。
-----windows下也有一個小工具:portforward.exe,圖形界面容易操作,個人平常使用可以,但是也沒有辦法實現與程序交互。
經過在網上搜索,發現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服務,並設置訪問控制,只允許特定主機連接。
SSH時:
netsh interface portproxy add v4tov4 listenaddress=172.20.10.214 listenport=22 connectaddress=192.168.214.34 connectport=22
轉自:
http://blog.csdn.net/any2mobile/article/details/11732617