Conecte-se a um URL de repositório diferente dependendo de estar na rede doméstica ou não

Conecte-se a um URL de repositório diferente dependendo de estar na rede doméstica ou não

Eu tenho uma cópia de trabalho do Subversion no meu laptop e o repositório correspondente no meu NAS. Quando estou fora de casa, atualizo e confirmo pela Internet por meio de uma conexão criptografada com um nome de domínio que resolve meu IP externo. Quando estou em casa e conectado através da minha rede doméstica, gostaria de atualizar e confirmar através de uma conexão não criptografada com meu IP interno (rede doméstica).

Eu preferiria não usar criptografia ou meu endereço IP externo quando estou em casa, porque ambos diminuem a velocidade da conexão (10 MB/s sem criptografia e com IP interno, 1 MB/s com criptografia e IP interno e 0,5 MB/s s com ou sem criptografia e com IP externo).

Existe alguma maneira de permitir que minha cópia de trabalho se refira a um URL diferente, dependendo de estar ou não conectado à minha rede doméstica? Ou existe outra maneira de resolver o problema da velocidade?

Responder1

Algumas opções:

  • Se isso for por meio de ssh ( svn+ssh://...), você poderá editar .ssh/configpara especificar aliases para hosts. Você poderia então escrever um script que edite esse arquivo de configuração na mudança de rede para que o alias aponte para o nome de host correto.
  • Se não for (através de httpou algo assim), você pode executar um servidor DNS local que resolva um nome de domínio especial que você pode criar para o IP do nome de domínio correto, dependendo da rede em que o computador está
  • (Provavelmente menos insano que o anterior) Execute um relé TCP em seu computador local em alguma porta e faça com que ele aponte para qualquer um dos servidores, dependendo da rede em que você está. Por exemplo, você pode vinculá-lo localhost:8080e encaminhá-lo myserver:80quando estiver na rede 1, publicserver:80quando estiver na rede 2. Em seguida, poderá ser necessário fazer uma verificação a partir desse endereço ( svn checkout http://localhost:8080/...).

Apenas algumas ideias aleatórias, mas todas parecem soluções alternativas. Talvez haja uma maneira mais fácil.

Ou você pode querer mudar para um sistema de controle de versão distribuído como o git, que permitirá que você envie para o controle remoto desejado ( git push -u someremote branchname, onde someremotese refere a um dos servidores).

Responder2

Resolvi um problema semelhante ontem, então os repositórios git no meu laptop podem ser sincronizados com um controle remoto na minha máquina desktop, sem a necessidade de usar um controle remoto diferente, dependendo se estou na LAN ou fora de casa.

Executei dnsmasqno meu desktop, com esta configuração:

domain-needed
bogus-priv
no-poll
local=/localdomain/
addn-hosts=/etc/extra_hosts

/etc/extra_hostscontém uma única entrada com o IP do meu desktop na LAN e o nome de domínio que resolve para o meu IP externo, por exemplo

192.168.0.72 jwakely.example.com

Em seguida, no meu laptop, edite a configuração do NetworkManager para minha conexão LAN wifi para "Somente endereços DHCP" e defina 192.168.0.72 como o servidor DNS primário e meu roteador como secundário (para fazer isso sem a GUI do NetworkManager, basta definir DNS1 e DNS2 e PEERDNS=não, ou coloque os servidores de nomes /etc/resolv.confmanualmente)

Funcionou perfeitamente quando me lembrei de permitir consultas DNS (porta 53) através do firewall do meu desktop.

Quando estou na minha LAN doméstica, o laptop usa a área de trabalho para consultas DNS, obtendo o IP interno para jwakely.example.come todas as outras consultas DNS são encaminhadas para o servidor DNS normal da minha área de trabalho (que é meu roteador ADSL). usa a dnsmasqinstância, todos os outros hosts na LAN ainda usam o roteador para DNS normalmente. Se meu laptop estiver na LAN, mas meu desktop não estiver funcionando, o laptop usará seu servidor DNS secundário e não poderá obter o IP interno, jwakely.example.commas tudo bem porque a máquina não está funcionando de qualquer maneira.

Responder3

Espero que você conheça o relocatecomando do Subversion. Você pode usá-lo manualmente. Se você usar nomes de host para acesso interno e externo, que resolvem apenas um em um local respectivamente, o erro svn em qualquer operação relacionada ao repositório lembrará de realocar

Outra ideia (suja) é usar conexão VPN em redes externas para protegeracessopara servidor e usocomum inseguroprotocolo para acesso ao repositório - na rede doméstica você simplesmente não acessa o link VPN. As vantagens desta forma são: URL único, segurança sob demanda, simplicidade à prova de erros

informação relacionada