import os NAT_IP = '8.8.254.254' # Comando para ativar o NAT NAT_ENABLE_CMD = 'echo 1 > /proc/sys/net/ipv4/ip_forward; ' # Comando para desativar o NAT NAT_DISABLE_CMD = 'echo 0 > /proc/sys/net/ipv4/ip_forward; ' # Regras para o iptables IPTABLES_RULES = [ # Permite o tráfego de saída da rede interna para a rede externa 'iptables -t nat -A POSTROUTING -o r-eth1 -j MASQUERADE', # Permite o tráfego de entrada na rede interna para as portas 8888 e 8844 dos servidores f'iptables -t nat -A PREROUTING -i r-eth1 -p tcp -m tcp --dport 8888 -j DNAT --to-destination {NAT_IP}:8888', f'iptables -t nat -A PREROUTING -i r-eth1 -p udp -m udp --dport 8844 -j DNAT --to-destination {NAT_IP}:8844', # Permite o tráfego de retorno da rede externa para a rede interna f'iptables -t nat -A PREROUTING -i r-eth1 -p tcp -m tcp -d {NAT_IP} --dport 8888 -j DNAT --to-destination 10.1.1.1:8888', f'iptables -t nat -A PREROUTING -i r-eth1 -p udp -m udp -d {NAT_IP} --dport 8844 -j DNAT --to-destination 10.1.1.1:8844' ] # Função para ativar o NAT def enable_nat(): os.system(NAT_ENABLE_CMD + ''.join(IPTABLES_RULES)) # Função para desativar o NAT def disable_nat(): os.system(''.join(IPTABLES_RULES[::-1]) + NAT_DISABLE_CMD) # Função para verificar se o NAT está ativo def nat_is_enabled(): return os.system('cat /proc/sys/net/ipv4/ip_forward') == '1' # Função para lidar com pacotes def handle_packet(packet): if IP in packet: new_packet = packet.copy() new_packet[IP].src = NAT_IP del new_packet[IP].chksum if TCP in packet: del new_packet[TCP].chksum elif UDP in packet: del new_packet[UDP].chksum new_packet.show2() sendp(new_packet) # Ativa o NAT ao iniciar a rede virtual enable_nat() print('NAT ativado') # Desativa o NAT ao finalizar a rede virtual atexit.register(disable_nat) sniff(iface=['r-eth1', 'r-eth0'], prn=handle_packet)