Eu sou relativamente novato no mundo das redes, embora eu tenha codificado e conheço alguns antecedentes de sysadmin há muito tempo. e aqui estou apenas a um passo do meu destino.
A foto toda é: em casa eu uso um LinkSys E3000 como gateway (não sei ainda se este é o nome), AP sem fio e nenhum outro dispositivo de roteamento / comutação. Ele serve 1 PC e 1 Mac com LAN, 1 Mac Mini + 1 iPad + 2 smartphones com WIFI.
Meu objetivo é usar um cliente openvpn no E3000 (com firmware tomate) e fazer todo o tráfego WiFi do meu iPad e do smartphone através dele, e outros dispositivos de rota permanecem a mesma rota não-openvpn.
Até agora eu consegui conectar o cliente openvpn no E3000 a um servidor openvpn, encapsular todo o tráfego de todos os meus dispositivos através dessa conexão openvpn. O que resta é como rotear seletivamente pelo IP de origem (pelo menos na minha suposição) para o túnel, enquanto não incomoda os outros.
Eu aprendi alguns 'iptables' e 'route' nos últimos dias, mas sem muita sorte, então vem a minha pergunta. Aqui estão algumas informações que ajudarão você a obter a estrutura.
ifconfig -a output, algumas linhas inúteis distribuídas e na interface web C0: C1: C0: 1A: E0: 28 é WAN, C0: C1: C0: 1A: E0: 27 é LAN, C0: C1: C0: 1A: E0: 29 é 2.4G wifi AP, C0: C1: C0: 1A: E0: 2A é 5G wifi AP.
root@router:/tmp/home/root# ifconfig -a
br0 Link encap:Ethernet HWaddr C0:C1:C0:1A:E0:27
inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1eth0 Link encap:Ethernet HWaddr C0:C1:C0:1A:E0:27
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1eth1 Link encap:Ethernet HWaddr C0:C1:C0:1A:E0:29
UP BROADCAST RUNNING ALLMULTI MULTICAST MTU:1500 Metric:1eth2 Link encap:Ethernet HWaddr C0:C1:C0:1A:E0:2A
UP BROADCAST RUNNING ALLMULTI MULTICAST MTU:1500 Metric:1lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Hostppp0 Link encap:Point-to-Point Protocol
inet addr:172.200.1.43 P-t-P:172.200.0.1 Mask:255.255.255.255 UP POINTOPOINT RUNNING MULTICAST MTU:1480 Metric:1vlan1 Link encap:Ethernet HWaddr C0:C1:C0:1A:E0:27
UP BROADCAST RUNNING ALLMULTI MULTICAST MTU:1500 Metric:1vlan2 Link encap:Ethernet HWaddr C0:C1:C0:1A:E0:28
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1wl0.1 Link encap:Ethernet HWaddr C0:C1:C0:1A:E0:29
BROADCAST MULTICAST MTU:1500 Metric:1
brctl mostra a saída
root@router:/tmp/home/root# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.c0c1c01ae027 no vlan1
eth1
eth2
antes do script de roteamento openvpn
root@router:/tmp/home/root# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
172.200.0.1 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 br0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 172.200.0.1 0.0.0.0 UG 0 0 0 ppp0
push do servidor openvpn
PUSH: Received control message: 'PUSH_REPLY,redirect-gateway,dhcp-option DNS 8.8.8.8,route 172.20.0.1,topology net30,ping 10,ping-restart 120,ifconfig 172.20.0.6 172.20.0.5'
script de rota de estoque do openvpn
Apr 24 14:52:06 router daemon.notice openvpn[1768]: /sbin/ifconfig tun11 172.20.0.6 pointopoint 172.20.0.5 mtu 1500
Apr 24 14:52:08 router daemon.notice openvpn[1768]: /sbin/route add -net 72.14.177.29 netmask 255.255.255.255 gw 172.200.0.1
Apr 24 14:52:08 router daemon.notice openvpn[1768]: /sbin/route add -net 0.0.0.0 netmask 128.0.0.0 gw 172.20.0.5
Apr 24 14:52:08 router daemon.notice openvpn[1768]: /sbin/route add -net 128.0.0.0 netmask 128.0.0.0 gw 172.20.0.5
Apr 24 14:52:08 router daemon.notice openvpn[1768]: /sbin/route add -net 172.20.0.1 netmask 255.255.255.255 gw 172.20.0.5
rota após o openvpn
root@router:/tmp/home/root# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
172.20.0.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun11
72.14.177.29 172.200.0.1 255.255.255.255 UGH 0 0 0 ppp0
172.200.0.1 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
172.20.0.1 172.20.0.5 255.255.255.255 UGH 0 0 0 tun11
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 br0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 172.20.0.5 128.0.0.0 UG 0 0 0 tun11
128.0.0.0 172.20.0.5 128.0.0.0 UG 0 0 0 tun11
0.0.0.0 172.200.0.1 0.0.0.0 UG 0 0 0 ppp0
algo que eu havia notado e tentei: * na interface web do cliente openvpn existe uma opção "Criar NAT no túnel", se eu verificar isso, existe o seguinte script (provavelmente executado após a conexão openvpn estabelecida)
root@router:/tmp/home/root# cat /tmp/etc/openvpn/fw/client1-fw.sh
#!/bin/sh
iptables -I INPUT -i tun11 -j ACCEPT
iptables -I FORWARD -i tun11 -j ACCEPT
iptables -t nat -I POSTROUTING -s 192.168.1.0/255.255.255.0 -o tun11 -j MASQUERADE
se eu desmarcar esta opção, a última linha não aparecerá. Então eu acho que provavelmente o meu problema será resolvido pelo iptables e pelos comandos relacionados ao NAT, eu não tenho conhecimento suficiente para entendê-los. Eu tentei executar
iptables -t nat -I POSTROUTING -s 192.168.1.6 -o tun11 -j MASQUERADE
manualmente após o openvpn connected (192.168.1.6 é o endereço IP do meu iPad), então meu iPad acessa a internet com o openvpn tunnel, no entanto todos os outros dispositivos não podem acessar a internet.
caso seja necessário, aqui está o iptables sobre o NAT
root@router:/tmp/home/root# iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DROP all -- 0.0.0.0/0 192.168.1.0/24
WANPREROUTING all -- 0.0.0.0/0 172.200.1.43
upnp all -- 0.0.0.0/0 172.200.1.43
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 0.0.0.0/0 0.0.0.0/0
SNAT all -- 192.168.1.0/24 192.168.1.0/24 to:192.168.1.1
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain WANPREROUTING (1 references)
target prot opt source destination
DNAT icmp -- 0.0.0.0/0 0.0.0.0/0 to:192.168.1.1
Chain upnp (1 references)
target prot opt source destination
DNAT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:5353 to:192.168.1.3:5353
Agradecemos antecipadamente por ajudar e ler muito isso, espero que tenha feito todas as informações necessárias para ajudar:)