Подключайтесь к разным URL-адресам репозитория в зависимости от того, находитесь ли вы в домашней сети или нет

Подключайтесь к разным URL-адресам репозитория в зависимости от того, находитесь ли вы в домашней сети или нет

У меня есть рабочая копия 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, безопасность по требованию, простота без ошибок

Связанный контент