LINUX.ORG.RU
ФорумAdmin

два гейтвея: http/https завернуть во второй


0

1

Хочу http трафик завернуть в vpn. Попробовал вот так, но в туннель попадают пакеты не с того адреса:

# ДОБАВЛЯЕМ
iptables -t mangle -A OUTPUT -p tcp -m multiport --dports 80 -j MARK --set-xmark 666
ip route add table exevpn default via 172.16.1.1
ip rule add fwmark 666 table exevpn
ip route flush cache

# ПРОВЕРЯЕМ
# iptables -t mangle -L OUTPUT -v
Chain OUTPUT (policy ACCEPT 556 packets, 33522 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  379 22740 MARK       tcp  --  any    any     anywhere             anywhere             multiport dports http MARK set 0x29a

# ip route get 6.6.6.6 mark 666
6.6.6.6 via 172.16.1.1 dev exevpn  src 172.16.1.111  mark 0x29a
    cache 

# ip route get 6.6.6.6
6.6.6.6 via 10.23.0.1 dev wlan0  src 10.23.2.131 
    cache 

Вроде бы и правила на фаерволе срабатывают и роутинг отрабатывает как надо. Но вот tcpdump говорит что в туннель exevpn попадают пакеты с src-ip интерфейса wlan0, а надо чтобы было с адреса 172.16.1.111:

$ sudo tcpdump -n -i exevpn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on exevpn, link-type EN10MB (Ethernet), capture size 65535 bytes
14:23:59.483671 IP 10.23.2.131.56446 > 87.250.250.119.80: Flags [S], seq 900304472, win 14600, options [mss 1460,sackOK,TS val 1053120 ecr 0,nop,wscale 7], length 0
14:23:59.483834 IP 10.23.2.131.35691 > 213.180.193.119.80: Flags [S], seq 2742770037, win 14600, options [mss 1460,sackOK,TS val 1053120 ecr 0,nop,wscale 7], length 0
14:24:00.486667 IP 10.23.2.131.56446 > 87.250.250.119.80: Flags [S], seq 900304472, win 14600, options [mss 1460,sackOK,TS val 1053421 ecr 0,nop,wscale 7], length 0

Что делать и почему так происходит? Неужели SNAT поднимать?

PS интерфейсы:

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether c4:85:08:17:30:c2 brd ff:ff:ff:ff:ff:ff
    inet 10.23.2.131/16 brd 10.23.255.255 scope global wlan0
    inet6 fe80::c685:8ff:fe17:30c2/64 scope link 
       valid_lft forever preferred_lft forever
3: intbr: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN 
    link/ether c6:02:87:04:13:ca brd ff:ff:ff:ff:ff:ff
    inet 172.16.5.254/24 brd 172.16.5.255 scope global intbr
    inet6 fe80::c402:87ff:fe04:13ca/64 scope link 
       valid_lft forever preferred_lft forever
6: exevpn: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 100
    link/ether aa:cb:15:09:c0:bf brd ff:ff:ff:ff:ff:ff
    inet 172.16.1.111/24 brd 172.16.1.255 scope global exevpn
    inet6 fe80::a8cb:15ff:fe09:c0bf/64 scope link 
       valid_lft forever preferred_lft forever

★★★★★

Пока решил вот так:

iptables -t nat -I POSTROUTING  -o exevpn -j MASQUERADE

Но это как-то костыльно.

true_admin ★★★★★
() автор топика
Ответ на: комментарий от uspen

эм, я не думаю что он имеет отношене к тому что в туннель попадают пакеты с ip другого интерфейса.

true_admin ★★★★★
() автор топика
Ответ на: комментарий от uspen

да, но маны говорят что сначала mangle, потом уже роутинг:

OUTPUT (for altering locally-generated packets before routing)

true_admin ★★★★★
() автор топика
Ответ на: комментарий от true_admin

Да и вправду сначала оутпут, а попробуйте CONNMARK как бы канекшен ориентированный, но в вашем случае конекта то даже нету. Интересно.

pyatak123
()
Ответ на: комментарий от ventilator

# ip route get 6.6.6.6 mark 666
6.6.6.6 via 172.16.1.1 dev exevpn src 172.16.1.111 mark 0x29a

uspen ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.