Você pode rotear ftp
diretamente para a Internet com iptables
Aqui, teremos ftp
para o roteamento. Use mangle
table de iptables
para modificar os pacotes ftp
.
sudo iptables -t mangle -A OUTPUT -p tcp --dport 21 -j MARK --set-mark 0x1
Estamos marcando todos os pacotes com porta de destino 21
as 0x1
.
Agora salve e reinicie o iptables
.
sudo service iptables save
sudo service iptables restart
Em seguida, crie uma nova tabela de rotas IP em /etc/iproute2/rt_tables
apenas fornecendo uma entrada
100 ftptable
Regra de gravação para ftp
pacotes.
ip rule add fwmark 0x1 lookup ftptable
Adicionar rota na nova tabela ftptable
. Todo o outro tráfego passará pelo
vpn if é vpn definido como gateway padrão, que pode ser visto pelo comando ip route show
.
Faça isso pela primeira vez quando estiver conectado à vpn.
Copiamos todas as entradas, exceto a entrada do gateway padrão da tabela principal.
sudo ip route show table main | grep -Ev ^default | while read ROUTE ; do ip route add table ftptable $ROUTE; done
Adicione uma entrada de gateway padrão para ftp
pacotes à tabela ftptable
sudo ip route add default dev <your_interface> table ftptable
your_interfrace
no comando é sua interface habitual de wifi ou eth para acessar a internet quando você não está conectado à internet.
Use ip route show table ftptable
para mostrar todas as rotas em ftptable
.
EDIT 1
Segunda via
Edite /etc/iproute2/rt_tables
e adicione uma nova tabela adicionando a seguinte linha:
100 ftptable
Configure sua nova tabela de roteamento denominada ftptable
com um gateway padrão e crie regras para enviar condicionalmente o tráfego para essa tabela.
ip route add default via <usual_gw_ip> dev <your_int> table ftptable
ip rule add fwmark 0x1 table ftptable
Seu script anotado final ficaria assim:
# Populate secondary routing table
ip route add default via <usual_gw_ip> dev <your_int> table ftptable
# Anything with this fwmark will use the secondary routing table
ip rule add fwmark 0x1 table ftptable
# Mark these packets so that iproute can route it through ftptable
iptables -A OUTPUT -t mangle -o <your_int> -p tcp --dport 21 -j MARK --set-mark 1
# now rewrite the src-addr
iptables -A POSTROUTING -t nat -o <your_int> -p tcp --dport 21 -j SNAT --to <your_local_ip>
Tente.
EDIT 2
Quando você está conectado à vpn, acho que todo o tráfego passa por eles. Na sua tabela de roteamento, você verá o padrão gw para tun0
interface.
Simples adicionar rota para encaminhar o tráfego para o servidor ftp para interface / ip diferente
ip route add <your_ftp_server_ip/32> dev <your_exit_int>
<your_exit_int> - represent not tun interface example: eth0, ens160, ...