Eu tenho uma caixa do Linux com estas interfaces:
eth0 Link encap:Ethernet HWaddr 14:da:e9:ef:75:7d
inet addr:176.9.85.182 Bcast:176.9.85.191 Mask:255.255.255.224
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.170.1.6 P-t-P:10.170.1.5 Mask:255.255.255.255
eth0
é minha conencessão de internet e tun0
é obviamente uma VPN.
Agora quero encaminhar todo o tráfego gerado por um usuário específico para a VPN. Como esse é o meu primeiro problema de roteamento real, eu pesquisei muito e leiai: Roteamento baseado no usuário , Base de roteamento na porta , VPN básica rotas e partes do LARC .
Até agora eu fiquei intrigado:
# Mark all traffic from user
iptables -t mangle -A OUTPUT -o eth0 -m owner --uid-owner 1002 -j MARK --set-mark 10
# Translate source address to VPN address
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
# And just to be sure allow forwarding on tun0
-P FORWARD ACCEPT
-A FORWARD -o tun0 -j ACCEPT
-A FORWARD -i tun0 -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
# Route based on mark
ip rule add fwmark 10 priority 1000 table 10
# Route
ip route add default via 10.170.1.5 tun0 table 10
ip rule from 10.170.1.6/32 priority 1200 table 10
ip rule to 10.170.1.5/32 priority 1200 table 10
O problema é que, de acordo com tcpdump
, o SNAT
funciona, mas as respostas não são roteadas de volta ao processo corretamente, mesmo que pareçam ter o endereço de origem correto. Eu habilitei ip_forwarding
com echo 1 > /proc/sys/net/ipv4/ip_forward
.
O que mais eu estou sentindo falta?
EDITADO:
A configuração de sysctl -w net.ipv4.conf.tap0.rp_filter=2
permite que o usuário se conecte à Internet, mas, de acordo com wget http://wtfismyip.com/text
, o endereço IP não é a VPN, mas meu endereço normal.
obrigado steved
15:22:17.713602 IP 10.170.1.6.42225 > google-public-dns-a.google.com.domain: 63046+ A? wtfismyip.com. (31)
15:22:17.713623 IP 10.170.1.6.42225 > google-public-dns-a.google.com.domain: 35494+ AAAA? wtfismyip.com. (31)
15:22:17.747989 IP google-public-dns-a.google.com.domain > 10.170.1.6.42225: 63046 1/0/0 A 54.200.182.206 (47)
15:22:17.854532 IP google-public-dns-a.google.com.domain > 10.170.1.6.42225: 35494 1/0/0 AAAA 2001:470:e8f8:1::1 (59)