![Подключайтесь к разным URL-адресам репозитория в зависимости от того, находитесь ли вы в домашней сети или нет](https://rvso.com/image/1303081/%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B0%D0%B9%D1%82%D0%B5%D1%81%D1%8C%20%D0%BA%20%D1%80%D0%B0%D0%B7%D0%BD%D1%8B%D0%BC%20URL-%D0%B0%D0%B4%D1%80%D0%B5%D1%81%D0%B0%D0%BC%20%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D1%8F%20%D0%B2%20%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8%20%D0%BE%D1%82%20%D1%82%D0%BE%D0%B3%D0%BE%2C%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D1%81%D1%8C%20%D0%BB%D0%B8%20%D0%B2%D1%8B%20%D0%B2%20%D0%B4%D0%BE%D0%BC%D0%B0%D1%88%D0%BD%D0%B5%D0%B9%20%D1%81%D0%B5%D1%82%D0%B8%20%D0%B8%D0%BB%D0%B8%20%D0%BD%D0%B5%D1%82.png)
У меня есть рабочая копия subversion на моем ноутбуке и соответствующий репозиторий на моем NAS. Когда я вне дома, я обновляю и фиксирую через интернет через зашифрованное соединение с доменным именем, которое разрешается в мой внешний IP. Когда я дома и подключен через свою домашнюю сеть, я хотел бы обновлять и фиксируть через незашифрованное соединение с моим внутренним (домашней сети) IP.
Я бы предпочел не использовать шифрование или свой внешний IP-адрес, когда я дома, поскольку оба варианта снижают скорость соединения (10 МБ/с без шифрования и с внутренним IP, 1 МБ/с с шифрованием и внутренним IP и 0,5 МБ/с с шифрованием или без него и с внешним IP).
Есть ли способ сделать так, чтобы моя рабочая копия ссылалась на другой URL в зависимости от того, подключен ли я к домашней сети или нет? Или есть другой способ решить проблему со скоростью?
решение1
Некоторые варианты:
- Если это через ssh (
svn+ssh://...
), то вы можете отредактировать свой,.ssh/config
чтобы указать псевдонимы для хостов. Затем вы можете написать скрипт, который редактирует этот файл конфигурации при изменении сети, чтобы псевдоним указывал на правильное имя хоста. - Если это не так (через
http
или что-то еще), вы можете запустить локальный DNS-сервер, который преобразует специальное доменное имя, которое вы можете составить из IP-адреса правильного доменного имени в зависимости от того, в какой сети находится компьютер. - (Вероятно, менее безумный, чем предыдущий) Запустите TCP-ретранслятор на локальном компьютере на каком-нибудь порту и сделайте так, чтобы он указывал на любой сервер в зависимости от сети, в которой вы находитесь. Например, вы можете сделать его привязанным к
localhost:8080
и перенаправлять его,myserver:80
когда вы в сети 1,publicserver:80
когда в сети 2. Затем вам может потребоваться выполнить проверку с этого адреса (svn checkout http://localhost:8080/...
).
Просто несколько случайных идей, все они кажутся обходными путями. Может быть, есть более простой способ.
Или вы можете захотеть перейти на распределенную систему управления версиями, такую как git, которая позволит вам отправлять изменения на нужный вам удаленный сервер ( git push -u someremote branchname
, где someremote
относится к одному из серверов).
решение2
Вчера я решил похожую проблему, и теперь репозитории git на моем ноутбуке можно синхронизировать с удаленным управлением на моем настольном компьютере, без необходимости использовать другой удаленный пульт в зависимости от того, нахожусь ли я в локальной сети или вне дома.
Я запустил dnsmasq
на своем десктопе с такой конфигурацией:
domain-needed
bogus-priv
no-poll
local=/localdomain/
addn-hosts=/etc/extra_hosts
/etc/extra_hosts
содержит одну запись с IP-адресом моего рабочего стола в локальной сети и доменным именем, которое преобразуется в мой внешний IP-адрес, например
192.168.0.72 jwakely.example.com
Затем на моем ноутбуке отредактируйте конфигурацию NetworkManager для моего подключения к локальной сети Wi-Fi на «Только адреса DHCP» и установите 192.168.0.72 в качестве основного DNS-сервера, а мой маршрутизатор — в качестве дополнительного (чтобы сделать это без графического интерфейса NetworkManager, просто установите DNS1 и DNS2 и PEERDNS=no или /etc/resolv.conf
вручную введите серверы имен).
Все заработало идеально, как только я вспомнил, что нужно разрешить DNS-запросы (порт 53) через брандмауэр моего компьютера.
Когда я нахожусь в домашней локальной сети, ноутбук использует настольный компьютер для DNS-запросов, поэтому получает внутренний IP для jwakely.example.com
, а все остальные DNS-запросы перенаправляются на обычный DNS-сервер моего настольного компьютера (который является моим маршрутизатором ADSL.) Только ноутбук использует экземпляр dnsmasq
, все остальные хосты в локальной сети по-прежнему используют маршрутизатор для DNS как обычно. Если мой ноутбук находится в локальной сети, но мой настольный компьютер не работает, то ноутбук использует свой вторичный DNS-сервер и не может получить внутренний IP для , jwakely.example.com
но это нормально, потому что машина все равно не работает.
решение3
Надеюсь, вы знаете о relocate
команде Subversion. Вы можете использовать ее вручную. Если вы будете использовать имена хостов для внутреннего и внешнего доступа, которые разрешают только одно в одном месте соответственно, ошибка svn при любой операции, связанной с репозиторием, напомнит о необходимости переместить
Другая (грязная) идея - использовать VPN-соединение во внешних сетях для обеспечения безопасности.доступна сервер и использоватьобщий небезопасныйпротокол для доступа к репозиторию - в домашней сети вы просто не поднимаете VPN-соединение. Преимущества этого способа: единый URL, безопасность по требованию, простота без ошибок