Primeiro, pare de pensar em eth0 e eth0: 1 como interfaces separadas. Pare desenhar eles como interfaces separadas. Eles não são. Você tem uma interface eth0 com dois endereços IP - o resto é uma ilusão que o Linux usa ferramentas antigas como ifconfig .
Com isso fora do caminho, isso é bem simples no lado do servidor.
-
Para configurar isso no seu servidor, inicie removendo o endereço 5.6.7.8 da eth0. Você não quer que o servidor pense que esses pacotes pertencem a ele e os consome; você quer que ele atue como um roteador puro, e ter um endereço roteado atribuído a uma interface local é exatamente o que um roteador não precisa.
ip addr del 5.6.7.8/x dev eth0
-
Agora adicione uma rota estática para o endereço no seu túnel:
ip route add 5.6.7.8/32 dev gre1
-
É isso (quase). A única complicação restante é que o servidor ainda precisa responder às consultas ARP para esse endereço proveniente do gateway local da sua empresa de hospedagem. Para isso você precisa do recurso proxy-ARP :
ip neigh add proxy 5.6.7.8 dev eth0
Isso habilita o proxy-ARP para um endereço. Não use
sysctl net.ipv4.conf.all.proxy_arp=1
para ativá-lo globalmente; isso causaria respostas proxy-ARP para tudo para o qual seu servidor possui uma rota, o que pode ser conveniente em alguns casos, mas desnecessário neste caso.(Como uma observação, o espaço do usuário parpd ou ndppd pode ser mais fácil de entender do que o proxy ARP / NDP baseado em kernel.
A configuração mais complexa pode ser necessária no roteador cliente , já que ele deve escolher entre dois gateways padrão (rota direta versus GRE) dependendo do endereço IP de origem.
Felizmente, o Mikrotik RouterOS tem o recurso de roteamento de política do Linux para pelo menos IPv4 (mas ainda não para o IPv6), então você pode seguir as generalizadas instruções ip rule
do Linux e mapeá-las 1: 1 para comandos RouterOS. Resumindo:
-
Adicione uma rota padrão sobre o túnel GRE a uma marca
tablede roteamento diferente (o RouterOS chama de 'marca de roteamento'):/ip route add dst-address=0.0.0.0/0 gateway=gre0 routing-mark="tunnelled"
-
Adicione uma regra de política para escolher esta tabela
markde roteamento (RouterOS ...) para os pacotes deste endereço de origem:/ip rule add src-address=5.6.7.8/32 table="tunnelled"
Um comentário menciona a ponte. Isso não funciona por dois motivos.
GRE é um túnel Layer3 que não transporta cabeçalhos semelhantes a Ethernet e, portanto, não é transponível. Existem variantes do Layer2, como o Linux gretap e Mikrotik eoip - infelizmente, elas são mutuamente incompatíveis, apesar de serem baseadas em GRE.
O comentário realmente menciona tun , talvez sob a suposição de que o túnel é OpenVPN (GRE não é OpenVPN), mas tun também é uma interface Layer3. Agora existe uma versão Layer2 - tap interface - e Linux OpenVPN pode de fato ser configurado para usá-lo e ser uma VPN Layer2 ... mas a implementação RouterOS OpenVPN não suporta esse modo de qualquer maneira. / p>
Além disso, como eth0: 1 não é uma interface separada, ela não pode ser interligada sem também vincular a própria eth0. Uma interface virtual macvlan poderia ser criada a partir da eth0 e, em seguida, interligada com um túnel? Não tenho certeza. Provavelmente seria mais problema do que vale a pena.