Eu finalmente encontrei! Estava oculto nos parâmetros do kernel.
Os pacotes de marcação simplesmente não estavam funcionando, mas com uma nova opção de Kernel no kernel 3.16+, faça: sysctl -w net.ipv4.tcp_fwmark_accept = 1
Obrigado!
Eu estou olhando para ter uma VPN habilitada em todas as portas, exceto a porta de entrada 80 para o meu servidor Apache. Meu computador está conectado ao openvpn no Ubuntu para um roteador que não está conectado a um vpn. É uma conexão vpn por dispositivo.
Primeiro, verifiquei para desativar a filtragem de caminho inverso. Eu chequei todo o rp_filter com isso
sysctl -a | grep \.rp_filter
e desativado:
sudo sysctl -w net.ipv4.conf.eth0.rp_filter=0
sudo sysctl -w net.ipv4.conf.tun0.rp_filter=0
etc..
Eu olhei para a tabela principal de roteamento IP quando a VPN está desconectada:
ip route
Volte-me isto:
default via 192.168.2.1 dev eth0 proto static
192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.20 metric 1
Então, para fins de teste, usei a porta de saída 80 e 443 em combinação com um whatismyip.com ou algo assim.
sudo iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 2
sudo iptables -t mangle -A PREROUTING -p tcp --dport 443 -j MARK --set-mark 2
sudo ip rule add fwmark 2 table 2
ip route flush cache
E, em seguida, criou uma tabela com a mesma conexão que parece quando a VPN foi desconectada
sudo ip route add 192.168.2.0/24 table 2 dev eth0 proto kernel scope link src 192.168.2.20 metric 1
sudo ip route add default table 2 via 192.168.2.1 dev eth0 proto static
E nenhum resultado até agora :(. Eu estou usando uma VPN criptografada sobre SSL. Ele nunca bybass a VPN.
Alguém poderia me ajudar nisso? Parece que minha filtragem de porta não está funcionando e não está entrando na minha tabela de consulta 2. Se a minha tabela 2 estiver vazia, tudo ainda funcionará na porta 80.
Existe um melhor para depurar os pacotes PREROUTING e verificar se eles estão realmente marcados?
EDIT: Depois de mais pesquisas parece com configuração CONFIG_IP_ROUTE_FWMARK no kernel não está disponível no Ubuntu que é necessário: (...
Eu finalmente encontrei! Estava oculto nos parâmetros do kernel.
Os pacotes de marcação simplesmente não estavam funcionando, mas com uma nova opção de Kernel no kernel 3.16+, faça: sysctl -w net.ipv4.tcp_fwmark_accept = 1
Obrigado!