Доброго времени суток. У меня тут возникла такая ситуация: есть маршрутизатор, на маршрутизаторе есть что-то вроде этого:
eth1 Link encap:Ethernet HWaddr 00:e0:4c:4b:a8:57
inet addr:10.2.1.36 Bcast:10.255.255.255 Mask:255.0.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:862010 errors:0 dropped:13 overruns:0 frame:0
TX packets:1197519 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:361132675 (344.4 MiB) TX bytes:1214546931 (1.1 GiB)
Interrupt:23 Base address:0xc000
tun3 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.10.0.5 P-t-P:10.10.0.5 Mask:255.255.255.0
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:211762 errors:0 dropped:0 overruns:0 frame:0
TX packets:263305 errors:0 dropped:314 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:132624488 (126.4 MiB) TX bytes:179612354 (171.2 MiB)
eth1 живет в серой провайдерской сети, я хожу через него в интернет.
tun3 — интерфейс openvpn (его ip и подсеть, как и провайдерскую, я не выбирал, просто так получилось).
Некоторый трафик я пускаю через vpn, для этого сделана отдельная таблица маршрутизации и несколько правил:
server:~# ip ro sh
10.10.0.0/24 dev tun3 proto kernel scope link src 10.10.0.5
192.168.15.0/24 dev eth3 proto kernel scope link src 192.168.15.1
10.0.0.0/8 dev eth1 proto kernel scope link src 10.2.1.36
default via 10.0.0.2 dev eth1
server:~#
server:~# ip ro sh table T1
10.10.0.0/24 dev tun3 scope link src 10.10.0.5
default via 10.10.0.1 dev tun3
server:~#
server:~# ip ru sh
0: from all lookup local
32764: from all fwmark 0xa lookup T1
32765: from 10.10.0.5 lookup T1
32766: from all lookup main
32767: from all lookup default
192.168.15.0/24 — внутренняя домашняя сеть. Когда нужно пустить трафик из нее через vpn, я делаю так:
iptables -t mangle -A PREROUTING -s 192.168.15.3 ! -d 192.168.15.0/24 -j MARK --set-mark 10 # маркирую трафик машины, ломящейся в интернет
iptables -t nat -A POSTROUTING -m mark --mark 10 --out-interface tun3 -j SNAT --to-source 10.10.0.5 # делаю маркированным пакетам nat
А еще на маршрутизаторе есть rtorrent, который качает и раздает торренты в режиме 24/7. Запускаю его следующим образом:
su - rtorrent -c "screen -d -m rtorrent"
У меня появилось желание завернуть весь torrent-трафик на tun3. Запускаю shell от имени пользователя rtorrent, делаю «traceroute 8.8.8.8» и вижу, что первый хоп — 10.0.0.2 (шлюз провайдера), пишу в соседнем терминале два правила (owner умеет работать только с OUTPUT/POSTROUTING):
iptables -t mangle -I OUTPUT 1 -m owner --uid-owner rtorrent -j MARK --set-mark 10
iptables -t mangle -A POSTROUTING -m owner --uid-owner rtorrent -j MARK --set-mark 10
server:~# netstat -anptu | grep rtorrent
tcp 0 0 0.0.0.0:40890 0.0.0.0:* LISTEN 19328/rtorrent
tcp 0 0 127.0.0.1:5000 0.0.0.0:* LISTEN 19328/rtorrent
tcp 0 1 10.2.1.36:60867 96.24.xxx.xxx:14010 SYN_SENT 19328/rtorrent
tcp 0 32145 10.2.1.36:50972 49.145.xxx.xxx:49844 ESTABLISHED 19328/rtorrent
tcp 0 1 10.2.1.36:54881 109.182.xxx.xxx:37372 SYN_SENT 19328/rtorrent
Больше никаких идей по определению torrent-трафика в iptables нет. Мне нужна помощь коллективного разума.