Apache-2.2

SVN 伺服器沒有響應

  • March 20, 2012

我一整天都在用這個把頭撞到牆上,如果能多看幾眼手頭的問題,我將不勝感激。

我們有一個內部的 SVN 伺服器,其中包含我們網站的所有實時和開發程式碼。我們的實時伺服器可以連接到這裡並從儲存庫中獲取更新。

在我們將 SVN 伺服器從物理機遷移到 vSphere 虛擬機之前,這一切都執行良好。現在,由於某種原因,我仍然無法理解,我們無法再連接到 SVN 伺服器。

SVN 伺服器執行 CentOS 6.2、Apache 和 SVN 1.7.2。SELinux 很好並且真正被禁用,當 iptables 停止時問題仍然存在。

我們的生產伺服器確實執行舊版本的 CentOS 和 SVN,但以前使用相同的系統,所以我不認為這是問題所在。

值得注意的是,如果我啟用了 iptables,使用 service iptables status,我可以看到一個數據包進入並被接受,但生產伺服器只是掛在任何 svn 命令上。如果我放棄等待並執行 CTRL-C 來中斷程序,我會得到“無法連接到伺服器”。

對我來說,這似乎與 SVN 伺服器拒絕外部連接有關,但我不知道這是怎麼發生的。

關於我可以從這裡嘗試什麼的任何想法?

謝謝,羅伯

編輯:網路拓撲生產伺服器位於我們內部 SVN 伺服器的外部。我們的 IPCop (?) 防火牆允許在埠 80 上從它(並且單獨)連接,並將連接傳遞到 SVN 伺服器。硬體都相當不錯,我不懷疑它的工作是否正確,尤其是當 iptables 看到新的連接時。

subversion.conf(在 /etc/httpd/conf.d 中)

LoadModule dav_svn_module     modules/mod_dav_svn.so
<Location /repos>
  DAV svn
  SVNPath /var/svn/repos

  <LimitExcept PROPFIND OPTIONS REPORT>
     AuthType Basic
     AuthName "SVN Server"
     AuthUserFile /var/svn/svn-auth
     Require valid-user
  </LimitExcept>
</Location>

如果配置

eth0      Link encap:Ethernet  HWaddr 00:0C:29:5F:C8:3A
         inet addr:172.16.0.14  Bcast:172.16.0.255  Mask:255.255.255.0
         inet6 addr: fe80::20c:29ff:fe5f:c83a/64 Scope:Link
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:32317 errors:0 dropped:0 overruns:0 frame:0
         TX packets:632 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000
         RX bytes:2544036 (2.4 MiB)  TX bytes:143207 (139.8 KiB)

網路統計-lntp

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      1484/mysqld
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      1135/rpcbind
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1351/sshd
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      1230/cupsd
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1575/master
tcp        0      0 0.0.0.0:58401               0.0.0.0:*                   LISTEN      1153/rpc.statd
tcp        0      0 0.0.0.0:5672                0.0.0.0:*                   LISTEN      1626/qpidd
tcp        0      0 :::139                      :::*                        LISTEN      1678/smbd
tcp        0      0 :::111                      :::*                        LISTEN      1135/rpcbind
tcp        0      0 :::80                       :::*                        LISTEN      1615/httpd
tcp        0      0 :::22                       :::*                        LISTEN      1351/sshd
tcp        0      0 ::1:631                     :::*                        LISTEN      1230/cupsd
tcp        0      0 ::1:25                      :::*                        LISTEN      1575/master
tcp        0      0 :::445                      :::*                        LISTEN      1678/smbd
tcp        0      0 :::56799                    :::*                        LISTEN      1153/rpc.statd

iptables –list -v -n (當 iptables 停止時)

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination

iptables –list -v -n (當 iptables 執行時,嘗試一次 svn 連接後)

Chain INPUT (policy ACCEPT 68 packets, 6561 bytes)
pkts bytes target     prot opt in     out     source               destination
  19  1304 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
   0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0
   0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
   0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
   1    60 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:80
   0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:80
   0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW udp dpt:80

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 17 packets, 1612 bytes)
pkts bytes target     prot opt in     out     source               destination

tcpdump

17:08:18.455114 IP 'production server'.43255 > 'svn server'.local.http: Flags [S], seq 3200354543, win 5840, options [mss 1380,sackOK,TS val 2011458346 ecr 0,nop,wscale 7], length 0
17:08:18.455169 IP 'svn server'.local.http > 'production server'.43255: Flags [S.], seq 629885453, ack 3200354544, win 14480, options [mss 1460,sackOK,TS val 816478 ecr 2011449346,nop,wscale 7], length 0
17:08:19.655317 IP 'svn server'.local.http > 'production server'k.43255: Flags [S.], seq 629885453, ack 3200354544, win 14480, options [mss 1460,sackOK,TS val 817679 ecr 2011449346,nop,wscale 7], length 0

(我認為您應該使用來自 httpd.conf 的 SVN 配置的完整詳細資訊以及ifconfig輸出以及netstat -lntp一些 pastebin 來更新您的問題)

但是,如果您執行以下操作…

[root@workstation001 ~]# iptables --flush             <---  flush rules
[root@workstation001 ~]# iptables --list -n -v
Chain INPUT (policy ACCEPT 17 packets, 2792 bytes)    <---  is default policy ACCEPT?
pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 18 packets, 1004 bytes)
pkts bytes target     prot opt in     out     source               destination 


[root@workstation001 ~]# setenforce 0
setenforce: SELinux is disabled               <---  f**k off selinux

而且您在來賓和VM主機上都這樣做,但仍然無法連接,那麼問題不在於iptables或selinux。

所以你可以像這樣繼續檢查問題的每個階段……

檢查您是否可以解析 svn 伺服器主機名;

[root@workstation001 ~]# dig svn.somehost.co.uk +short
www.somehost.co.uk.
209.135.17.202       <---  resolved!!

能ping通IP嗎?

ping 209.135.17.202
PING 209.135.17.202 (209.135.17.202) 56(84) bytes of data.
64 bytes from 209.135.17.202: icmp_req=1 ttl=50 time=132 ms <---  reply!
....

(假設您的 svn 使用 mod_svn_dav apache 模組公開…)

你能在 80 埠連接到這個伺服器嗎?

[root@workstation001 ~]# telnet svn.liepaper.co.uk 80
Trying 209.135.17.202...
Connected to svn.liepaper.co.uk.          <---  connected!
Escape character is '^]'.
^]
telnet> 

你能連接到 httpd 伺服器並獲取伺服器字元串嗎?(你可以使用 curl、netcat、telnet 或任何你選擇的 TCP 連接工具)

[root@workstation001 ~]# wget -O- --server-response http://svn.liepaper.co.uk
--2012-03-20 16:16:06--  http://svn.liepaper.co.uk/
Resolving svn.liepaper.co.uk... 209.135.17.202
Connecting to svn.liepaper.co.uk|209.135.17.202|:80... connected.
HTTP request sent, awaiting response... 
 HTTP/1.1 401 Authorization Required
 Date: Tue, 20 Mar 2012 16:16:06 GMT
 Server: Apache                    <---  server header value
 WWW-Authenticate: Basic realm="Authorization Realm"
 Content-Length: 401
 Keep-Alive: timeout=5, max=100
 Connection: Keep-Alive
 Content-Type: text/html; charset=iso-8859-1
Authorization failed.

然後像這樣嘗試使用者名/密碼;

wget -O- --server-response --user=mysvnuser --password=mokeypoke http://svn.liepaper.co.uk/projects/admin/

應該包括類似的東西;

HTTP/1.1 200 正常

然後嘗試命令行 svn 工具,看看他們是否建立了連接;

[root@workstation001 ~]# svn list --username=mysvnuser --password=mokeypoke http://svn.liepaper.co.uk/projects/admin/
mystupidcode/
anotherwasteofcomputer/
cantprogrammefortoffee/

基本上,如果你到這裡 svn 正在工作,它的客戶端工具或代理配置錯誤……等等……

要考慮的一件事是代理與標頭混淆,而且 Windows 7 不喜歡基本身份驗證,因此您可能需要實施摘要身份驗證或一些自簽名 SSL 以繞過您的 VM、某些代理或 windows 網路為你的 svn 連接工作。(在你知道問題出在哪里之前,不要嘗試任何這些……)


此外,REJECT 規則中的所有命中都表明您可能甚至都沒有嘗試連接到埠 80 上的 SVN。

8    26840 2356K REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

在此之前添加一條帶有 LOG 行的規則,以將這些數據包轉儲到 syslog;

itpables  -A INPUT 8 -j LOG --log-prefix "LOGDROP: "

將“8”更改為您的 INPUT 鏈的任何正確規則編號….然後在 /var/log 中查找 kern.log 或您的 syslog 配置為將 iptables 日誌發送到的任何日誌文件。(這應該很明顯,因為它會很快變得龐大)

引用自:https://serverfault.com/questions/371601