我一整天都在用这个屁股抨击我的头,我将不胜感激。
我们有一个内部的SVN服务器,其中包含我们网站的所有实时和开发代码。 我们的在线服务器可以连接到这个并从存储库获取更新。
直到我们将SVN服务器从物理机器迁移到vSphere VM之前,这一切都正常。 现在,由于某些原因,我们不能再连接到SVN服务器。
SVN服务器运行CentOS 6.2,Apache和SVN 1.7.2。 SELinux很好,被禁用,当iptables停止时问题仍然存在。
我们的生产服务器运行的是CentOS和SVN的老版本,但之前的系统工作,所以我不认为这是问题。
值得注意的是,如果我启用了iptables,使用服务iptables状态,我可以看到一个数据包进入并被接受,但生产服务器挂在任何svn命令上。 如果我放弃等待,并做一个CTRL-C来打破这个过程,我得到一个“无法连接到服务器”。
对我来说,似乎是与SVN服务器拒绝外部连接,但我不知道这将如何发生。
任何想法,我可以尝试从这里?
谢谢,罗布
编辑:networking拓扑生产服务器位于我们的内部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>
使用ifconfig
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)
netstat -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的SVNconfiguration的全部细节,以及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
而且你在guest虚拟机和VM主机上都这么做,你仍然无法连接,那么问题不是iptables或者selinux。
所以你可以继续检查问题的每一个阶段就像这样….
检查你可以parsingsvn服务器的主机名;
[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服务器,并得到服务器的string…(你可以使用curl,netcat,telnet或任何你select的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 OK
然后尝试命令行svn工具,看看他们是否进行连接;
[root@workstation001 ~]# svn list --username=mysvnuser --password=mokeypoke http://svn.liepaper.co.uk/projects/admin/ mystupidcode/ anotherwasteofcomputer/ cantprogrammefortoffee/
基本上,如果你到这里svn正在工作,其客户端工具或代理错误configuration….等…
需要考虑的一件事情是,代理服务器与头文件混淆,而且Windows 7不喜欢基本身份validation,所以您可能需要实现摘要身份validation,或者一些自签名的SSL来绕过虚拟机,代理或networking为你的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或您的syslogconfiguration为发送iptables日志logging的任何日志文件。 (这应该是显而易见的,因为它会迅速变大)