2015年8月17日 星期一

Citrix NetScaler Two Arm Mode SNIP Record Issue


在Citrix的環境中,NetScaler提供了良好的接入點解決方案,但是也造成了一些稽核上的困境。

有客戶面臨到經過了NetScaler後無法正確取得Source IP的困擾,即Web Server透過NetScaler (Two-Arm Mode)做Loadbalance後,無法看到Client IP Address的問題,只能看到SNIP(NetScaler的Ssub Net IP Address)的問題。
我們提供了下述解決方式:

官方網站參考連結
http://support.citrix.com/proddocs/topic/netscaler-load-balancing-93/ns-lb-advancedsettings-cip-tsk.html



To insert client IP address in the client request by using the configuration utility
  1. In the navigation pane, expand Load Balancing, and then click Services.
  2. In the details pane, select the service for which you want to add the client IP address in the request, and then click Open.
  3. In the Configure Service dialog box, click the Advanced tab.
  4. Under Settings, select the Client IP check box.
  5. In the Header text box, type the header tag (for example, X-Forwarded-for).
  6. Click OK.



我寫Code的一個好友跟我說,可以透過下述ASP.NET語法去取得相關IP位址資訊,請您的AP Team可以嘗試看看。
 string clientIP = GetClientIP();
        ///
        ///
取得正確的ClientIP
        ///

        ///
        protected string GetClientIP()
        {
            //判所client端是否有設定代理伺服器
            if (Request.ServerVariables["HTTP_VIA"] == null)  
                return Request.ServerVariables["REMOTE_ADDR"].ToString();
            else
                return Request.ServerVariables["
HTTP_X_FORWARDED_FOR"].ToString(); 
        }

        private static string RetrieveIP(HttpRequest request)
        {
            string ip = request.ServerVariables["HTTP_X_FORWARDED_FOR"];
            if (ip == null || ip.Trim() == string.Empty)
            {
                ip = request.ServerVariables["REMOTE_ADDR"];
            }
            return ip;
        }

參考連結

經Lab測試結果與客戶驗證證明此法有效。