Задача такая. Есть 2 линка. tun0 и tun1. Через эти линки доступен некоторый адрес:порт. пусть 10.10.10.10:80. Локальный комп имеет адрес 2.2.2.2 Необходимо перенаправлять
2.2.2.2:81 -> 10.10.10.10:80 через tun0
2.2.2.2:82 -> 10.10.10.10:80 через tun1
Поскольку после rdr пакет уже никак не отличить - нужно использовать tag
Код: Выделить всё
nat on tun0 from $int_if:network to any -> $tun_addr0
nat on tun1 from $int_if:network to any -> $tun_addr1
rdr on $int_if inet proto tcp to 2.2.2.2 port 81 tag G1 -> 10.10.10.10 port 80
rdr on $int_if inet proto tcp to 2.2.2.2 port 82 tag G2 -> 10.10.10.10 port 80
pass in quick on $int_if route-to (tun0 $tun_addr0) tagged G1 keep state
pass in quick on $int_if route-to (tun1 $tun_addr1) tagged G2 keep state
В результате
Пакеты уходят правильно, возвращается ответ, но клиенту не отсылается(возможно что-то с состояниями не так). Без route-to всё замечательно. (отправляется через дефолтный маршрут, конечно.) Не работает как через tun0, так и через tun1. Т.е. не работает даже тогда, когда route-to оставляет маршрут без изменений.
Код: Выделить всё
# tcpdump -ni tun1
13:05:53.078646 IP 10.0.5.71.59553 > 194.247.133.19.1433: S 269971865:269971865(0) win 65535 <mss 1260,nop,nop,sackOK>
13:05:53.082044 IP 194.247.133.19.1433 > 10.0.5.71.59553: S 4086661049:4086661049(0) ack 269971866 win 16384 <mss 1380,nop,nop,sackOK>
13:05:55.752842 IP 194.247.133.19.1433 > 10.0.5.71.59553: S 4086661049:4086661049(0) ack 269971866 win 16384 <mss 1380,nop,nop,sackOK>
13:05:56.086955 IP 10.0.5.71.59553 > 194.247.133.19.1433: S 269971865:269971865(0) win 65535 <mss 1260,nop,nop,sackOK>
13:06:02.021776 IP 10.0.5.71.59553 > 194.247.133.19.1433: S 269971865:269971865(0) win 65535 <mss 1260,nop,nop,sackOK>
13:06:02.315709 IP 194.247.133.19.1433 > 10.0.5.71.59553: S 4086661049:4086661049(0) ack 269971866 win 16384 <mss 1380,nop,nop,sackOK>
#tcpdump -ni rl0 tcp and port 81
13:05:53.078614 IP 172.16.3.48.1817 > 172.16.3.62.1436: S 269971865:269971865(0) win 65535 <mss 1260,nop,nop,sackOK>
13:05:56.086932 IP 172.16.3.48.1817 > 172.16.3.62.1436: S 269971865:269971865(0) win 65535 <mss 1260,nop,nop,sackOK>
13:06:02.021756 IP 172.16.3.48.1817 > 172.16.3.62.1436: S 269971865:269971865(0) win 65535 <mss 1260,nop,nop,sackOK>
# pfctl -ss | grep 80
self tcp 172.16.3.48:1817 -> 10.0.5.71:59553 -> 194.247.133.19:80 ESTABLISHED:SYN_SENT
self tcp 194.247.133.19:80 <- 172.16.3.62:82 <- 172.16.3.48:1817 CLOSED:SYN_SENT