Usando o Ubuntu 14
Eu tenho uma máquina Linux onde existem duas interfaces:
eth1: 172.16.20.1
ppp0: 192.168.0.2
O ppp0 é conectado a um dispositivo que possui uma interface PPP (192.168.0.1) e uma interface WAN (172.16.20.2). Eu posso verificar se este dispositivo pode alcançar 172.16.20.1
O problema que estou tendo é se eu enviar um pacote usando Python na mesma máquina:
client.py
import socket
cl = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
cl.sendto("Hello", ("172.16.20.1", 5005))
server.py
import socket
srv = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
srv.bind(("", 5005))
while True:
data, addr = srv.recvfrom(2048)
print("Message: ", data)
o script funciona bem, mas não consigo ver o pacote no Wireshark saindo da eth1 (só consigo ver quando escolho capturar na interface lo). Eu assumo que o sistema operacional detectou que o pacote é para uma de suas interfaces locais e não o envia através do soquete 192.168.0.2 criado.
Quando adiciono as seguintes regras para evitar que isso aconteça:
sudo ip route del table local 172.16.20.1 dev eth1
sudo ip route add table local 172.16.20.1 dev ppp0
sudo ip route flush cache
O que acontece é:
- Eu posso ver os pacotes no Wireshark chegando agora na eth1, o endereço de origem é o endereço da WAN (172.16.20.2)
- Não consigo ver nenhuma saída do server.py depois de reiniciar o programa.
Ignorando a interface ppp0 e usando duas interfaces ethx:
Se eu tentar executar o programa em duas máquinas separadas (cliente e servidor) (sem aplicar as regras), posso ver os pacotes chegando à eth1 no Wireshark e a saída em server.py. Se eu tentar executar o programa em duas máquinas separadas E eu aplicar as regras acima para a conexão ppp0 (não a removi), não consigo mais ver nenhuma saída do server.py, mas ainda consigo ver pacotes chegando no Wireshark. Meu conhecimento da pilha TCP / IP não é bom, mas parece que a camada de link não está mais encaminhando para a camada de aplicativo?