Encaminhar rede pública em torno da rede atual

1

Para os propósitos desta discussão, eu tenho uma máquina Linux sempre atual com dois nics:

  • wifi0
  • eth0

Um diagrama muito grosseiro da minha configuração desejada se parece com isto:

                               (----------------------------)
                               |    linux/main computer     |
                               |                            |
     ----------- /  ~ ~ ~ ~ ~ \ -------              -------|        
     | internet |-- ~ wifi ~ --| wifi0 |------------| eth0  |======)
     ----------- \  ~ ~ ~ ~ ~ / -------              -------|      |
                               |                            |      |
                               (----------------------------)      |
     \   subnet   /                                                |
      \  wifi    /                                                 |
      ------------                                                 |
      | dd-wrt   |=================================================)
      | router   |====\ subnet
      |          |====\ subnet
      ------------

eth0 está conectada a um roteador com um gateway de firewall pré-configurado que eu confio e é o nic de / para o qual eu deveria preferir todo o fluxo de tráfego geral.

O problema é que o gateway de firewall em que eu confio não é mais um gateway; não tem conexão com a internet.

Em vez disso, o meu acesso à internet vem de wifi0 . Desejo remover wifi0 , encaminhar todo o tráfego para o meu gateway confiável sobre eth0 e manter minha própria sub-rede local, conforme gerenciada pelo meu roteador / gateway principalmente no meu roteador / gateway.

Então, basicamente, estou procurando uma maneira de configurar o wifi0 para aceitar todo o tráfego de entrada e encaminhá-lo imediatamente por meio do eth0 para o meu roteador. Eu quero que todo o tráfego de saída não vinculado à minha sub-rede local seja enviado diretamente por wifi0 para o mundo amplo, mas todo o tráfego de sub-redes a ser gerenciado pelo meu roteador local e todos tráfego de saída - seja do meu roteador ou do meu computador conectado à Internet para passar por nat e aparecer como se fosse originado do mesmo endereço.

Tem que ser possível, e eu realmente gostaria de fazer isso apenas com iptables e / ou as ferramentas incluídas com os pacotes iproute2 atuais. Minha preferência é networkd para o nic init / setup, e estou ciente de que talvez precise trazer uma ou duas virtualidades na caixa linux conectada para que isso aconteça, mas estou confuso nos detalhes.

Alguém por favor me ajudará com isso? Eu sou muito ruim com filtros de pacotes e similares.

p.s. Eu dificilmente sou casada com o título desta pergunta e se alguém puder pensar em algo mais sucinto e descritivo, eu ficaria grato.

Se isso faz alguma diferença, eu também posso fazer:

-----        \   router   /
box  \        \ ________ /
---- |        /          \
eth0 [========] wan port |
---- |        |          |
eth1 [========] lan port [=======\subnet
____ /        \ ________ /

... porque na verdade eu tenho duas nics ethernet na minha caixa principal além do wifi0 onde a internet é originada. Então eu suponho que eu poderia encaminhar (ou bridge?) todo o tráfego entre wifi0 e eth0 e para a maioria das intenções e propósitos ignore esses dois completamente enquanto roteava todo o tráfego do dia-a-dia através de eth1 . Eu realmente não entendo iptables ou nftables ou qualquer um dos outros bem o suficiente para afetar meu objetivo. Por favor me dê uma mão.

    
por mikeserv 22.09.2015 / 16:13

1 resposta

1

Esta não é necessariamente uma resposta garantida porque não tenho a configuração que você descreveu.

Requisitos

  1. Todo o tráfego de saída da Internet da sub-rede gerenciada ou Linux / Main Computer ("LMC") para ir diretamente para a Internet via wlan0, usando SNAT ou MASQUERADE
  2. Todo tráfego de entrada na Internet que faz parte do tráfego de saída da Internet deve ser entregue diretamente, usando o rastreamento de conexão criado pelo SNAT ou pelo MASQUERADE (acima)
  3. Todo o tráfego de saída de sub-rede do LMC para ir direto
  4. Todo o tráfego de entrada na Internet desconhecido deve ser roteado para o DD-WRT "firewall confiável", o que assumiremos como 192.168.1.253

Acredito que podemos fazer isso com iptables .

# Shortcuts
filter() { iptables -t filter "$@"; }
nat() { iptables -t nat "$@"; }

# Set the policy for INPUT and FORWARDING to DROP, OUTPUT to ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Empty all chains (erase all rules)
iptables -Z

# Enable forwarding
echo 1> net.ipv4.ip_forward

# SNAT outbound traffic on wlan0 (we will use MASQUERADE)
nat -A POSTROUTING -o wlan0 -j MASQUERADE

# Accept return traffic for our own outbound connections
filter -A INPUT -i wlan0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Forward all unknown inbound traffic to DD-WRT box, eg 192.168.1.253
nat -A PREROUTING -i wlan0 -j DNAT --to-destination 192.168.1.253

Agora configure as tabelas de roteamento para que o seu "LMC" saiba como chegar ao DD-WRT e, por sua vez, a rota padrão do DD-WRT seja seu "LMC". Na verdade, tudo na sua rede deve ter "LMC" como sua rota padrão. O "LMC" em si deve ter seu ISP upstream como sua rota padrão.

Se você precisar de detalhes específicos, forneça alguns (exemplo) endereços IP e gateways.

Uma palavra de advertência: Não tenho certeza se isso é possível, conforme descrito na sua pergunta. Pode ser necessário NAT / rotear todo o tráfego através do DD-WRT (mesmo o tráfego de saída do "LMC").

    
por 09.08.2016 / 13:43