Execução do Shibby Tomato v130 em um Asus RT-N66U.
Meus objetivos são os seguintes
Eu posso conseguir 1 ou 2 trabalhando um de cada vez, mas não consigo fazer com que ambos trabalhem ao mesmo tempo.
Primeiro, eu criei uma segunda LAN usando o Tomato GUI (br1) e dei o endereço IP 192.168.2.1. Eu do que a transmissão atribuída para usar este IP modificando a linha do arquivo de configuração settings.json "bind-address-ipv4": "192.168.2.1",
Em segundo lugar, usando uma versão ligeiramente modificada do script de up up da WAN publicado nesta resposta para howto somente encapsulamento de hosts específicos através do cliente openvpn em tomate [fechado]
# This code goes in the WAN UP section of the Tomato GUI.
#
# This script configures "selective" VPN routing. Normally Tomato will route ALL traffic out
# the OpenVPN tunnel. These changes to iptables allow some outbound traffic to use the VPN, and some
# traffic to bypass the VPN and use the regular Internet instead.
#
# To list the current rules on the router, issue the command:
# iptables -t mangle -L PREROUTING
#
# Flush/reset all the rules to default by issuing the command:
# iptables -t mangle -F PREROUTING
#
#
# First it is necessary to disable Reverse Path Filtering on all
# current and future network interfaces:
#
for i in /proc/sys/net/ipv4/conf/*/rp_filter ; do
echo 0 > $i
done
#
# Delete and table 100 and flush any existing rules if they exist.
#
ip route flush table 100
ip route del default table 100
ip rule del fwmark 1 table 100
ip route flush cache
iptables -t mangle -F PREROUTING
#
# Copy all non-default and non-VPN related routes from the main table into table 100.
# Then configure table 100 to route all traffic out the WAN gateway and assign it mark "1"
#
# NOTE: Here I assume the OpenVPN tunnel is named "tun11".
#
#
ip route show table main | grep -Ev ^default | grep -Ev tun11 \
| while read ROUTE ; do
ip route add table 100 $ROUTE
done
ip route add default table 100 via $(nvram get wan_gateway)
ip rule add fwmark 1 table 100
ip route flush cache
#
# Define the routing policies for the traffic. The rules will be applied in the order that they
# are listed. In the end, packets with MARK set to "0" will pass through the VPN. If MARK is set
# to "1" it will bypass the VPN.
#
# EXAMPLES:
#
# All LAN traffic will bypass the VPN (Useful to put this rule first, so all traffic bypasses the VPN and you can configure exceptions afterwards)
# iptables -t mangle -A PREROUTING -i br0 -j MARK --set-mark 1
# Ports 80 and 443 will bypass the VPN
# iptables -t mangle -A PREROUTING -i br0 -p tcp -m multiport --dport 80,443 -j MARK --set-mark 1
# All traffic from a particular computer on the LAN will use the VPN
# iptables -t mangle -A PREROUTING -i br0 -m iprange --src-range 192.168.1.2 -j MARK --set-mark 0
# All traffic to a specific Internet IP address will use the VPN
# iptables -t mangle -A PREROUTING -i br0 -m iprange --dst-range 216.146.38.70 -j MARK --set-mark 0
# All UDP and ICMP traffic will bypass the VPN
# iptables -t mangle -A PREROUTING -i br0 -p udp -j MARK --set-mark 1
# iptables -t mangle -A PREROUTING -i br0 -p icmp -j MARK --set-mark 1
# By default all traffic bypasses the VPN
iptables -t mangle -A PREROUTING -i br0 -j MARK --set-mark 1
# Only foward to Transmission
iptables -t mangle -A PREROUTING -i br0 -m iprange --src-range 192.168.2.1 -j MARK --set-mark 0
Eu sou capaz de obter apenas o roteamento de tráfego de Transmissão através da VPN com todos os outros computadores que passam pela WAN normal. No entanto, a execução deste script parece eliminar minha porta para o servidor e não consigo mais acessar o servidor de fora da rede.
Eu configurei as portas TCP 80 e 443 para serem encaminhadas para 192.168.1.3 na GUI do Tomato. Verificando ambos iptables -L -vn
e iptables -L -vn -t nat
antes de executar o script de up up da WAN (o servidor pode ser acessado de fora, mas a VPN ainda não está em execução)
iptables -L -vn
mostra
Chain wanin (1 references)
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp -- * * 0.0.0.0/0 192.168.1.3 tcp dpt:80
0 0 ACCEPT tcp -- * * 0.0.0.0/0 192.168.1.3 tcp dpt:443
iptables -L -vn -t nat
mostra
Chain WANPREROUTING (1 references)
pkts bytes target prot opt in out source destination
0 0 DNAT icmp -- * * 0.0.0.0/0 0.0.0.0/0 to:192.168.1.1
1 40 DNAT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 to:192.168.1.3:80
0 0 DNAT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 to:192.168.1.3:443
Poste a execução do script de atualização da WAN
iptables -L -vn
mostra
Chain wanin (1 references)
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp -- * * 0.0.0.0/0 192.168.1.3 tcp dpt:80
0 0 ACCEPT tcp -- * * 0.0.0.0/0 192.168.1.3 tcp dpt:443
iptables -L -vn -t nat
mostra
Chain WANPREROUTING (1 references)
pkts bytes target prot opt in out source destination
0 0 DNAT icmp -- * * 0.0.0.0/0 0.0.0.0/0 to:192.168.1.1
0 0 DNAT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 to:192.168.1.3:80
0 0 DNAT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 to:192.168.1.3:443
Ambos da mesma forma que antes, mas não consigo acessar o servidor na porta 80 ou 443 de fora da rede.
Portanto, a questão simples é usar esse script WAN up ou algo semelhante. Como faço para encaminhar portas para um IP específico e mantê-las fora da VPN?