SVN 伺服器沒有響應
我一整天都在用這個把頭撞到牆上,如果能多看幾眼手頭的問題,我將不勝感激。
我們有一個內部的 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 日誌發送到的任何日誌文件。(這應該很明顯,因為它會很快變得龐大)