由於工做中一個項目,總部與各個分部只有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