Meu objetivo é : ter duas interfaces de rede em um sistema eth0
e tap0
, e ambos terem uma conexão de internet funcionando. Devo ser capaz de vincular seletivamente serviços/programas em ambos.
Exemplo do Apache : Eu quero criar os seguintes vhosts:
site1.example.com
vinculado a85.xxx.49.100
disponível emeth0
site2.example.com
vinculado a89.xxx.xxx.5
disponível emtap0
site3.example.com
vinculado a89.xxx.xxx.4
disponível emtap0
Os programas no sistema devem se comunicar com o mundo externo usando eth0
por padrão, MAS também podem se vincular a IPs tap0
(se necessário) e usá-los para tráfego de entrada e saída. Exemplo : Devo ser capaz de executar speedtest-cli --source="85.xxx.49.100"
(IP em eth0
) e speedtest-cli --source="89.xxx.xxx.4"
(IP em tap0
).
Tenho uma máquina Debian que possui interface Ethernet física eth0
, essa interface obtém IP, gateway e servidor DNS de um servidor DHCPd. O /etc/network/interfaces
tem:
allow-hotplug eth0
no-auto-down eth0
iface eth0 inet dhcp
Quando a rede fica online, minha tabela de roteamento fica assim:
$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 85.xxx.xxx.1 0.0.0.0 UG 0 0 0 eth0
85.xxx.49.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
link-local 0.0.0.0 255.255.0.0 U 1000 0 0 eth0
Agora, adicionei um tap
dispositivo (usando OpenVPN) a essas máquinas. O cliente OpenVPN e o servidor não atribuem nenhum endereço IP . A ideia é ter apenas a camada 2 lá entre as máquinas. Aqui está a configuração do servidor OpenVPN:
local 89.xxx.xxx.8
port xxxx
proto udp
dev tap0
mode server
tls-server
user nobody
group nogroup
tls-version-min 1.2
auth SHA512
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384
script-security 1
client-to-client
keepalive 10 60
compress
max-clients 10
cipher AES-256-CBC
persist-key
persist-tun
A rede no servidor está configurada como:
10-static-eth0.network
[Match]
Name=eth0
[Network]
Bridge=br0
25-br0.netdev
[NetDev]
Name=br0
Kind=bridge
25-br0.rede
[Match]
Name=br0
[Network]
DHCP=no
Address=89.xxx.xxx.8/24
Address=89.xxx.xxx.7/24
Address=89.xxx.xxx.6/24
Gateway=89.xxx.xxx.1
DNS=1.1.1.1
DNS=8.8.8.8
30 toques.rede
[Match]
Name=tap0
[Network]
Bridge=br0
Depois de iniciar o OpenVPN, todos os quadros Ethernet entrando no tap0
dispositivo no cliente para sair br0
do servidor. Em teoria, isso significaria que posso atribuir qualquer endereço IP reservado para o servidor ao tap0
dispositivo no cliente . Tentei adicionar um IP ao tap
dispositivo do cliente:
ip addr add 89.xxx.xxx.5/24 broadcast 89.xxx.xxx.255 dev tap0
ip link set tap0 up
route add default gw 89.xxx.xxx.1 metric 200
ip route add 89.xxx.xxx.8 via 85.xxx.xxx.1 dev eth0
O IP está lá e consigo fazer ping no google com ambos: ping -I eth0 google.com
e ping -I tap0 google.com
, porém não consigo, por exemplo, usar wget
com a fonte definida como 89.xxx.xxx.5
- apenas expira.
Como devo proceder? Obrigada.
Existem várias suposições sobre como a rede funciona nesta questão que não correspondem à realidade.
Você não pode "ponte um dispositivo de toque para uma rede de um servidor remoto". Um dispositivo de toque é um meio de permitir que algum tipo de aplicativo controle uma interface de rede. Sem um aplicativo conectado a esse dispositivo de toque, o dispositivo de toque não faz exatamente nada.
Não.
O que você pode fazer é usar algum tipo de túnel (OpenVPN, tinc, wirdeguard; há muitas opções). Este túnel criará uma interface de rede em sua máquina debian (toca ou outra), e uma interface de rede no servidor. No servidor , você pode conectar este dispositivo à interface de rede externa. Na máquina debian , você pode fornecer a este dispositivo dois endereços IP (
89.xxx.xxx.5
e89.xxx.xxx.6
), assumindo que a rede externa no servidor também pode ser atribuída a eles.Não use duas rotas padrão. Use uma única rota padrão e vincule seu apache a cada um dos três endereços da Internet na máquina Debian.
Editar
Você já tem uma solução de trabalho conforme detalhado na outra resposta, mas para referência:
Depois de ler http://www.tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.netfilter.html , fui criativo
iptables
eiproute2
isso parece funcionar para o meu caso de uso:tap0
foi criado e que o L2 está funcionando;89.xxx.xxx.5
ao dispositivo e configure o link:tap0
e adicione as rotas:iptables
para marcar todo o tráfego tcp/udp vindo de / para nosso IP atribuído (89.xxx.xxx.5
) para que ele use a tabela de roteamento secundária / gateway padrão:Alguns testes :
eth0
:tap0
: