Назад | Перейти на главную страницу

Невозможно получить доступ к svn на виртуальной машине, но все остальное работает нормально

У меня есть сервер (host) запускает сервер Turnkey Trac (tracsrv) в Virtualbox, и я получаю странные результаты с сетью. Кто-нибудь знает, как это объяснить и можно ли решить проблему?

Симптомы

user@randomcomputer ~$ ssh root@tracsrv # works as expected
user@randomcomputer ~$ curl -I http://tracsrv/ # works as expected
          user@host ~$ svn co svn://tracsrv/helloworld # works as expected
user@randomcomputer ~$ svn co svn://tracsrv/helloworld # FAILS

randomcomputer, host (и поэтому также tracsrv) все работают в одной LAN-сети (обычная / 24 LAN с одним GW, ничего особенного).

Конфигурация

host работает iptables, где все заблокировано, кроме, например, http:

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]

# Accept any related or established connections
-I INPUT  1 -m state --state RELATED,ESTABLISHED -j ACCEPT
-I OUTPUT 1 -m state --state RELATED,ESTABLISHED -j ACCEPT

# Allow all traffic on the loopback interface
-A INPUT  -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT

[...]

# SSH
-A INPUT  -i eth1 -p tcp -m tcp --dport 22 -m state --state NEW -j ACCEPT

# HTTP+HTTPS
-A INPUT  -i eth1 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT  -i eth1 -p tcp -m tcp --dport 443 -j ACCEPT

# Inbound SVN
# Added this as I was unsure whether the host affected the VM
-A INPUT  -i eth1 -p tcp -m tcp --dport 3690 -j ACCEPT

COMMIT

Но эти настройки не должны мешать tracsrvs трафик, поскольку его сеть находится в мостовом режиме:

user@host ~$ VBoxManage showvminfo tracsrv | grep "NIC 1"
NIC 1:           MAC: XXXXXXXXXXXX, Attachment: Bridged Interface 'eth1', Cable connected: on, Trace: off (file: none), Type: Am79C973, Reported speed: 0 Mbps, Boot priority: 0, Promisc Policy: deny

И наконец iptables на tracsrv принимает весь трафик:

root@tracsrv ~# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

И svnserve работает на tracsrv:

root@tracsrv ~# lsof -i :svn
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
svnserve 2352 root    3u  IPv4   5550      0t0  TCP *:svn (LISTEN)

РЕДАКТИРОВАТЬ: В ответ на @Guido:

user@randomcomputer ~$ telnet tracsrv 3690
Trying tracsrv...
telnet: Unable to connect to remote host: Connection timed out
user@randomcomputer ~$ svn co svn://tracsrv/helloworld
svn: E000110: Unable to connect to a repository at URL 'svn://tracsrv/helloworld'
svn: E000110: Can't connect to host 'tracsrv': Connection timed out

Ты используешь svn: протокол для удаленного доступа. Это не лучший выбор, за исключением изолированных доверенных локальных сетей. Поскольку вы чувствуете необходимость настроить iptables, это звучит так, как будто вы не доверяете локальной сети.

Попробуйте настроить доступ к подрывной деятельности через svn+ssh: или https: (http: также подходит только для доверенных локальных сетей, поскольку учетные данные и контент отправляются в виде обычного текста)