Я хочу перенаправить свой TCP-трафик в IRC через VPN.
Я помечаю пакеты с помощью iptables и создаю новый маршрут для этих пакетов:
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/tun0/rp_filter
iptables -t mangle -A OUTPUT ! -d 192.168.0.0/16 -p tcp --dport 6667 -j MARK --set-mark 0x42
ip route add default dev tun0 src 10.5.82.5 table VPN
ip rule add fwmark 0x42 table VPN
VPN-соединение:
# ifconfig tun0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet adr:10.5.82.5 P-t-P:10.5.82.6 Masque:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:2898 errors:0 dropped:0 overruns:0 frame:0
TX packets:3163 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:100
RX bytes:159644 (155.9 KiB) TX bytes:257601 (251.5 KiB)
Пакеты перенаправляются на tun0 на локальном компьютере (теги iptables и правило ip в порядке), но на интерфейс tun0 VPN пакет не поступает.
Есть идея?
Заранее спасибо.
Если ваш IRC-трафик исходит от того же хоста, на котором вы создали правила, вы можете столкнуться с проблемой «неправильного» исходного IP-адреса в исходящих пакетах - проверьте, является ли исходный адрес 10.5.82.5, используя tcpdump -i tun0 -v -n
. Если это не так, просто добавьте src 10.5.82.5
на ваш ip route add
команда.
Если трафик исходит из другого места, рассмотрите правило NAT: iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
Также ваш маршрут должен идти через 10.5.82.6 (IP-адрес удаленного шлюза), а не ваш локальный интерфейс. Хотя он должен работать в любом случае, поскольку это интерфейс P-t-P, он кажется неправильным. При добавлении маршрута через скрипт вы можете просто опустить параметр «via» и просто использовать dev tun0
. Это работает с интерфейсами P-t-P, поскольку нет никакой двусмысленности в отношении того, с каким хостом связаться на другой стороне канала.
Используйте OpenVPN редирект-шлюз возможность автоматического перенаправления шлюза по умолчанию в VPN, без ручной игры с маршрутом и iptables.