OS X natd, nat entre en0 e tap0

2

Estou tentando conectar uma interface tap0 e en0 com o natd. O fundo (simplificado) é:

Eu tenho um aplicativo em execução em um smartphone e um simples servidor UDP em execução no meu laptop. O servidor UDP está escutando na interface de toque e eu quero falar com o servidor com o aplicativo do smartphone. (Como eu disse isso é um pouco simplificado, o servidor UDP tem que ouvir na interface do toque e não pode ouvir en0.)

Eu tentei o seguinte:

  • Abrir tap0:

    $ su
    $ exec 5<>/dev/tap0   (running in one terminal-tab)
    
  • Defina o endereço 0, a máscara de rede, etc.

    $ sudo ifconfig tap0 inet 10.1.1.100 netmask 255.255.255.0 broadcast 10.1.1.255
    
  • Ativar o encaminhamento de portas

    $ sudo sysctl -w net.inet.ip.forwarding=1
    
  • Iniciar o natd:

    $ sudo /usr/sbin/natd -alias_address MY_EN0_IP \
        -interface tap0 -use_sockets -same_ports -dynamic -clamp_mss \
        -enable_natportmap -natportmap_interface en0 \
        -redirect_port udp 10.1.1.100:50000 50000 -l
    
  • Inicie um exemplo de UDPServer, ouvindo em 10.1.1.100:50000

Netstat mostra a porta aberta:

$ netstat -n | grep 50000
udp4       0      0  10.1.1.100.50000       *.*

Quando envio um pacote do meu smartphone para o laptop com destino: MY_EN0_IP: 50000 Eu posso ver o pacote com o Wireshark chegando ao en0, mas o laptop está respondendo com uma mensagem "ICMP port unreachable".

Eu não tenho idéia do que está errado, não deveria o natd abrir a porta 50000 em en0, aceitar os pacotes e NAT-los para a interface tap0? O que estou perdendo?

    
por andreas 22.03.2013 / 12:41

1 resposta

2

Parece que eu mesmo encontrei a solução usando pf e pfctl. Isso parece funcionar:

  • ativar o encaminhamento de porta:

    $ sudo sysctl net.ipv4.ip_forward=1
    
  • Adicione a seguinte regra ao pf.conf (localizado em / private / etc /)

    "rdr em en0 proto udp de qualquer para qualquer porta 50000 - > 10.1.1.100 porta 50000" (sem as aspas e logo abaixo da "rdr-anchor"

  • leia as regras pf:

    $ sudo pfctl -f /private/etc/pf.conf
    
  • ativar pf:

    $ sudo pfctl -e
    
por 28.03.2013 / 15:01

Tags