Compartilhar internet entre placas de rede?

25. Re: Compartilhar internet entre placas de rede?

Buckminster
Buckminster

(usa Debian)

Enviado em 06/06/2017 - 10:46h

Vamos criar rotas, faça o seguinte, mas antes leia tudo:

# apt-get update
# aptitude safe-upgrade (se pedir, digite yes e aguarde terminar)

# apt-get install iproute2


Edite o arquivo /etc/iproute2/rt_tables. Crie as tabelas na seguinte posição ou no final mesmo:

# local
20 link_A
21 link_B
#

Pode ser qualquer nome e qualquer número no começo, escolhi aleatoriamente.

Crie no script do Iptables regras de encaminhamento via comando "ip" para as tabelas.

ip rule add fwmark 2 table 20 prio 20
ip rule add fwmark 3 table 21 prio 20

Ou seja, todo pacote que estiver marcado com 2, deve ser direcionado para a tabela 20, no caso "link_A" e 3 para tabela 21 no link_B.

Adicione regras de roteamento para essas tabelas:

ip route add default via IP_A dev sem_fio_A table 20 # IP_A é o IP do gateway do link A
ip route add default via IP_B dev sem_fio_B table 21 # IP_B é o IP do gateway do link B

Isso diz para que todo pacote direcionado à tabela 20, saia pelo gateway IP_A na interface sem_fio_A, mesma coisa a outra regra, mas com a devida configuração.

Marcando os pacotes:
iptables -t mangle -A PREROUTING -i eth1 -p tcp -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -i eth0 -p tcp -j MARK --set-mark 3
iptables -t mangle -A OUTPUT -o eth1 -p tcp -j MARK --set-mark 2
iptables -t mangle -A OUTPUT -o eth0 -p tcp j MARK --set-mark 3
#
Isso diz que tudo que entrar pela interface eth1 na chain PREROUTING terá a marca 2 e eth0 a marca 3 e sair pela chain OUTPUT a mesma marcação.

Finaliza:
ip route flush cache <<< limpando as tabelas

Ficará assim o script:

#! /bin/sh
### BEGIN INIT INFO
# Provides: nome_do_arquivo_sem_sh_no_final
# Short-Description: executa o arquivo do Iptables
### END INIT INFO
#
#Desabilitando o tráfego entre as placas
#################################
echo 0 > /proc/sys/net/ipv4/ip_forward
#
##Apagando e restaurando as chains e tabelas
######################################
iptables -F # Remove as regras de todas as chains
iptables -Z # Zera as regras de todas as chains
iptables -X # Apaga todas as chains
# iptables -t nat -Z
# iptables -t nat -F
# iptables -t nat -X
# iptables -t mangle -Z
# iptables -t mangle -F
# iptables -t mangle -X
#
##Proteção contra ping, SYN Cookies, IP Spoofing e proteções do kernel
##########################################################
echo 1 > /proc/sys/net/ipv4/tcp_syncookies # Syn Flood (DoS)
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts # Port scanners
echo 0 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses # Sem resposta remota
for i in /proc/sys/net/ipv4/conf/*; do
echo 0 > $i/accept_redirects # Sem redirecionar rotas
echo 0 > $i/accept_source_route # Sem traceroute
echo 1 > $i/log_martians # Loga pacotes suspeitos no kernel
echo 1 > $i/rp_filter # Ip Spoofing
echo 1 > $i/secure_redirects; done # Redirecionamento seguro de pacotes
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all # Sem ping e tracert
#
# Carregando os módulos - Não é necessário todos os módulos,
# somente aqueles que você irá utilizar.
# O iptables, por padrão, carrega os módulos principais automaticamente.
# Para identificar qual módulo adicional carregar, você deve elaborar todo o script
# e depois de acordo com o nome do alvo utilizado, você carrega o mesmo módulo.
# Por exemplo, se você utilizar a seguinte regra:
# iptables -A FORWARD -p udp -m multiport --dport 80,1024:65535 -j DROP
# o módulo "ipt_multiport" deve ser carregado.
# Abaixo estão quase todos os módulos.
################################
modprobe ip_tables
modprobe iptable_nat
modprobe iptable_filter
modprobe iptable_mangle
#
# modprobe ip_conntrack
# modprobe ip_conntrack_ftp
# modprobe ip_conntrack_irc
# modprobe ip_nat_ftp
# modprobe ip_queue
# modprobe ip_gre
#
# modprobe ipt_LOG
modprobe ipt_MARK <<< descomente
# modprobe ipt_REDIRECT
# modprobe ipt_REJECT
modprobe ipt_MASQUERADE <<< descomente
# modprobe ipt_TCPMSS
# modprobe ipt_TOS
#modprobe ipt_NETMAP
#
# modprobe ipt_limit
# modprobe ipt_mac
# modprobe ipt_multiport
# modprobe ipt_owner
# modprobe ipt_state
# modprobe ipt_tos
modprobe ipt_mark <<< descomente
# modprobe ipt_tcpmss
# modprobe ipt_string
# modprobe ipt_statistic
#
# modprobe nf_nat_pptp
# modprobe nf_nat_proto_gre
# modprobe nf_nat_irc
#
# Definindo políticas padrões
######################
#iptables -P INPUT DROP # iptables a política padrão da chain INPUT é proibir tudo
#iptables -P FORWARD DROP
#iptables -P OUTPUT ACCEPT
#
# Liberando a Loopback
####################
iptables -A INPUT -i lo -j ACCEPT
#
## Regras de segurança na internet e acessos
#####################################
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW ! -i sem_fio_A -j DROP
iptables -A FORWARD -m state --state NEW ! -i sem_fio_A -j DROP
iptables -A INPUT -m state --state NEW ! -i sem_fio_B -j DROP
iptables -A FORWARD -m state --state NEW ! -i sem_fio_B -j DROP
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP
#
# Redirecionamento para o Squid e mascaramento/compartilhamento
###########################################
# iptables -t nat -A PREROUTING -i ethx -p tcp --dport 80 -j REDIRECT --to-port 3128
#
iptables -A FORWARD -i sem_fio_A -o eth1 -j ACCEPT # adicione essa regra
iptables -A FORWARD -i sem_fio_B -o eth0 -j ACCEPT # adicione essa regra
#
iptables -t nat -A POSTROUTING -o sem_fio_A -j MASQUERADE # sem_fio_A é a placa de rede A
iptables -t nat -A POSTROUTING -o sem_fio_B -j MASQUERADE # sem_fio_B é a placa de rede B
#
ip rule add fwmark 2 table 20 prio 20
ip rule add fwmark 3 table 21 prio 20
#
ip route add default via IP_A dev sem_fio_A table 20 # IP_A é o IP do gateway do link A
ip route add default via IP_B dev sem_fio_B table 21 # IP_B é o IP do gateway do link B
#
iptables -t mangle -A PREROUTING -i eth1 -p tcp -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -i eth0 -p tcp -j MARK --set-mark 3
iptables -t mangle -A OUTPUT -o eth1 -p tcp -j MARK --set-mark 2
iptables -t mangle -A OUTPUT -o eth0 -p tcp j MARK --set-mark 3
#
ip route flush cache # limpando as tabelas
#
# A partir daqui você pode inserir as regras de liberação e bloqueio.
#
# Finalizando:
# Habilitando o tráfego entre as placas
##########################
echo 1 > /proc/sys/net/ipv4/ip_forward
#

Deixei comentadas as regras das políticas padrões ficando elas todas como ACCEPT. Depois de testar se tudo está vindo e entrando corretamente em cada placa de rede tu descomenta as políticas e testa de novo.
A diferença entre o PREROUTING e o OUTPUT é que PREROUTING abrange os pacotes que foram originados fora do Firewall e OUTPUT são os pacotes originados no Firewall.
Basicamente é isso, caso não der certo, verifique as mensagens do Iptables e olhe os logs.

Depois de testar com as regras acima, teste substituindo as regras

iptables -t mangle -A PREROUTING -i eth1 -p tcp -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -i eth0 -p tcp -j MARK --set-mark 3
iptables -t mangle -A OUTPUT -o eth1 -p tcp -j MARK --set-mark 2
iptables -t mangle -A OUTPUT -o eth0 -p tcp j MARK --set-mark 3

por

ip rule add from 192.168.10.0/24 table 20
ip rule add from 192.168.11.0/24 table 21

As duas regras acima fazem o roteamento pela origem não sendo necessária a marcação de pacotes.
Teste qual configuração funciona melhor para você.

Dúvidas, continue postando aqui.


  


26. Re: Compartilhar internet entre placas de rede?

Wesley
wesleyzao

(usa Outra)

Enviado em 17/06/2017 - 20:07h

@Bunckmister
Perdão pela ausência...está muito corrido pra mim esses dias atrás...mas vamos lá rodei o script aqui...e apareceu uma mensagem de erro...na hora de executar o script:
Mensagem de erro que apareceu aqui:
RTNETLINK answers: File exists
RTNETLINK answers: File exists

Desde já obrigado!



27. Re: Compartilhar internet entre placas de rede?

Wesley
wesleyzao

(usa Outra)

Enviado em 17/06/2017 - 20:17h

@Buckminster
"Debuguei" e o problema está nessa parte
"
ip route add default via IP_A dev sem_fio_A table 20 # IP_A é o IP do gateway do link A
ip route add default via IP_B dev sem_fio_B table 21 # IP_B é o IP do gateway do link B
"
pois com ela comentada o script roda sem nenhuma mensagem de erro...


28. Re: Compartilhar internet entre placas de rede?

Buckminster
Buckminster

(usa Debian)

Enviado em 18/06/2017 - 09:38h

wesleyzao escreveu:

@Buckminster
"Debuguei" e o problema está nessa parte
"
ip route add default via IP_A dev sem_fio_A table 20 # IP_A é o IP do gateway do link A
ip route add default via IP_B dev sem_fio_B table 21 # IP_B é o IP do gateway do link B
"
pois com ela comentada o script roda sem nenhuma mensagem de erro...


Em IP_A e IP_B tu colocaste os IPs dos roteadores?


29. Re: Compartilhar internet entre placas de rede?

Wesley
wesleyzao

(usa Outra)

Enviado em 22/06/2017 - 12:44h

Buckminster escreveu:

wesleyzao escreveu:

@Buckminster
"Debuguei" e o problema está nessa parte
"
ip route add default via IP_A dev sem_fio_A table 20 # IP_A é o IP do gateway do link A
ip route add default via IP_B dev sem_fio_B table 21 # IP_B é o IP do gateway do link B
"
pois com ela comentada o script roda sem nenhuma mensagem de erro...


Em IP_A e IP_B tu colocaste os IPs dos roteadores?


Novamente perdão pela demora... coloquei...coloquei sim...essa mensagem de erro só parece quando define o gateway lá no arquivo interfaces... aí o script executa(mas se tenta executa ele pela segunda vez seguida não vai...dá aquela mesma mensagem de erro...) mas tanto no cliente A da placa de rede A e o cliente B da placa de rede B fica sem reconhece a rede ou seja tanto na rede A como na rede B dá como rede desconhecida.
OBS: eu coloquei sim o ip da placa de A como gateway na placa cliente A e fica a mesma coisa no cliente B, coloquei o ip da placa de rede B como gateway na placa do cliente B


30. Re: Compartilhar internet entre placas de rede?

Wesley
wesleyzao

(usa Outra)

Enviado em 22/06/2017 - 12:53h

@Buckminster
Se possível, estarei a disposição caso possa me dar uma ajuda mais de perto...tenho as máquinas virtuais tudo criada...qualquer coisa se possível podemos utilizar o team viewer ou algum outro no qual vc tenha acesso a minha máquina...


31. Re: Compartilhar internet entre placas de rede?

Wesley
wesleyzao

(usa Outra)

Enviado em 04/07/2017 - 23:01h

up!



01 02 03



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts