![Conecte-se a um URL de repositório diferente dependendo de estar na rede doméstica ou não](https://rvso.com/image/1303081/Conecte-se%20a%20um%20URL%20de%20reposit%C3%B3rio%20diferente%20dependendo%20de%20estar%20na%20rede%20dom%C3%A9stica%20ou%20n%C3%A3o.png)
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/config
para 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
http
ou 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:8080
e encaminhá-lomyserver:80
quando estiver na rede 1,publicserver:80
quando 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 someremote
se 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 dnsmasq
no meu desktop, com esta configuração:
domain-needed
bogus-priv
no-poll
local=/localdomain/
addn-hosts=/etc/extra_hosts
/etc/extra_hosts
conté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.conf
manualmente)
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.com
e todas as outras consultas DNS são encaminhadas para o servidor DNS normal da minha área de trabalho (que é meu roteador ADSL). usa a dnsmasq
instâ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.com
mas tudo bem porque a máquina não está funcionando de qualquer maneira.
Responder3
Espero que você conheça o relocate
comando 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