OpenVPN no modo de ponte pode fazer exatamente isso. Eu usei-o extensivamente neste modo para propósitos similares. Para a rede, é indistinguível de um switch que tem duas portas em locais separados.
Não há necessidade de hardware especial. Qualquer máquina rodando Linux que tenha 2 NICs pode fazer isso. Existem também algumas distribuições de roteadores, como o Vyatta, que suportarão isso. Você pode usar algo como DD-WRT também, mas não tenho certeza sobre isso.
É assim que eu faço com o openSUSE como distro. Pode ser um pouco mais fácil com algo como o Vyatta, mas já fiz isso várias vezes e funciona perfeitamente:
Escolha uma máquina para ser um servidor. Execute as seguintes tarefas nessa máquina:
-
Configure o easy-rsa para gerenciamento de chaves (ele é armazenado em /usr/share/openvpn/easy-rsa/2.0/ no openSUSE, mas eu faço uma cópia em / etc / openvpn em vez de usá-lo nesse local):
-
cd < localização da easy_rsa >
-
Edite o arquivo vars e defina os parâmetros KEY_ *
-
vars
-
./ clean-all
-
./ build-dh
-
./ pkitool --initca
-
./ pkitool - servidor mybridge
-
./ pkitool mybridge-client
-
-
Crie uma interface de ponte criando o arquivo / etc / sysconfig / network / ifcfg-mybridge, onde você pode substituir qualquer nome que você queira por mybridge:
BOOTPROTO='none' BRIDGE='yes' BRIDGE_FORWARDDELAY='0' BRIDGE_PORTS='eth1' BRIDGE_STP='off' STARTMODE='auto'
2a. Estou assumindo que você terá a eth1 como a interface "interna" aqui. Você pode configurá-lo de tal forma que o servidor use apenas um único NIC, que é o que eu normalmente faria nessa situação, mas estou tentando mantê-lo um pouco simples. Se você quiser tentar isso, crie a ponte como acima, coloque eth0 em BRIDGE_PORTS e copie as informações de IP do ifcfg-eth0 para ifcfg-mybridge. Em seguida, exclua ifcfg-eth0, já que sua ponte será a interface primária
-
Crie um /etc/openvpn/mybridge-server.conf (supondo que você tenha feito uma cópia do easy-rsa):
port 1194 proto udp dev mytun dev-type tap mode server tls-server ca /etc/openvpn/easy-rsa/keys/ca.crt cert /etc/openvpn/easy-rsa/keys/mybridge-server.crt key /etc/openvpn/easy-rsa/keys/mybridge-server.key dh /etc/openvpn/easy-rsa/keys/dh1024.pem keepalive 10 600 comp-lzo fast-io user nobody group nogroup persist-key persist-tun script-security 2 up mybridge-up.sh status /var/run/openvpn/mybridge-server-status verb 3
-
Crie o arquivo mybridge-up.sh em / etc / openvpn para garantir que a interface openVPN seja adicionada à ponte quando ela for iniciada:
#!/bin/bash # Called with these args: # tap_dev tap_mtu link_mtu ifconfig_local_ip ifconfig_netmask [ init | restart ] /sbin/ip link set $1 up /sbin/brctl addif mybridge $1
-
Assegure-se de que o openVPN inicie na inicialização e inicie / reinicie tudo:
-
chkconfig --add openvpn
-
rcnetwork restart
-
rcopenvpn start
-
Neste ponto, você terá uma interface de ponte chamada mybridge, contendo as interfaces eth1 e mytun. Como qualquer switch, os quadros Ethernet são passados apenas se o destino mac estiver presente no outro lado
Agora você pode configurar o lado do cliente:
-
Crie uma interface de ponte como no servidor, criando o arquivo / etc / sysconfig / network / ifcfg-mybridge:
BOOTPROTO='none' BRIDGE='yes' BRIDGE_FORWARDDELAY='0' BRIDGE_PORTS='eth1' BRIDGE_STP='off' STARTMODE='auto'
-
Copie os arquivos ca.crt, mybridge-client.crt e mybridge-client.key para a máquina cliente. Vou usar o / etc / openvpn / keys / no meu exemplo
-
Crie um /etc/openvpn/mybridge-client.conf:
proto udp dev mytun dev-type tap client remote hostname_or_ip_of_server 1194 ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/mybridge-client.crt key /etc/openvpn/keys/mybridge-client.key float resolv-retry infinite nobind comp-lzo fast-io user nobody group nogroup persist-key persist-tun script-security 2 up mybridge-up.sh verb 3
-
Copie ou crie o arquivo mybridge-up.sh no servidor em / etc / openvpn
-
Assim como no servidor, certifique-se de que o openVPN inicie na inicialização e inicie / reinicie tudo:
-
chkconfig --add openvpn
-
rcnetwork restart
-
rcopenvpn start
-
Depois de tudo isso, qualquer máquina em ambos os lados poderá falar entre si como se estivessem no mesmo segmento físico. Você poderia até mesmo atender o DHCP de um lado, se quisesse, ou executar remotamente a configuração de dispositivos que saem da caixa com endereços IP estáticos pré-configurados.