<div>Dear Admins!<br></div><div><br></div><div>Please help. Can't make work routing. I have net scheme:<br></div><div>IPSEC Client 1 <--> IPSEC Server <--> IPSEC Client 2<br></div><div><br></div><div>IPSEC IPs of computers:<br></div><div>Server: 10.1.1.1<br></div><div>Client 1: 10.1.2.1<br></div><div>Client 2: 10.1.3.1<br></div><div><br></div><div>I can ping 10.1.3.1 from 10.1.2.1, traffic goes through 10.1.1.1. It works.<br></div><div><br></div><div>I need to make "Client 2" an Internet gateway to pass all Internet traffic from Client 1.<br></div><div><br></div><div>But when I try to add route:<br></div><div>ip route add 8.8.4.4/32 via 10.1.3.1<br></div><div>it seems route not working, like gateway 10.1.3.1 is just ignored. Traffic ends on 10.1.1.1, and do not pass to 10.1.3.1 at all. I check it with tcpdump.<br></div><div><br></div><div>I use VTI to accomplish this task, test everything in three virtual machines.<br></div><div><br></div><div>"Server"<br></div><div>root@ubuntu1604:~# cat /etc/ipsec.conf<br></div><div>config setup<br></div><div>        charondebug="cfg 2, dmn 2, ike 2, net 2"<br></div><div>        uniqueids=never<br></div><div><br></div><div>conn %default<br></div><div>        keyexchange=ikev2<br></div><div>        reauth=no<br></div><div>        forceencaps=yes<br></div><div>        fragmentation=yes<br></div><div>        compress=no<br></div><div>        dpdaction=clear<br></div><div>        closeaction=clear<br></div><div>        mobike=no<br></div><div>        ike=aes256gcm16-prfsha384-ecp384!<br></div><div>        esp=aes256gcm16-ecp384!<br></div><div><br></div><div>conn server<br></div><div>        leftupdown=/usr/local/sbin/ipsec-vti.sh<br></div><div>        mark=%unique<br></div><div>        leftid=%server.example.com<br></div><div>        leftsubnet=0.0.0.0/0<br></div><div>        rightsubnet=0.0.0.0/0<br></div><div>        rightsourceip=%config<br></div><div>        leftcert=gw-cert.pem<br></div><div>        leftsendcert=always<br></div><div>        auto=add<br></div><div><br></div><div>root@ubuntu1604:~# cat /usr/local/sbin/ipsec-vti.sh<br></div><div>#!/bin/bash<br></div><div>set -o nounset<br></div><div>set -o errexit<br></div><div>VTI_IF="ipsec${PLUTO_UNIQUEID}"<br></div><div>DEFAULT_IF=`ip route | awk '/default/{ print $5 }'`<br></div><div>PLUTO_MY_SOURCEIP="10.1.1.1"<br></div><div>case "${PLUTO_VERB}" in<br></div><div>    up-client)<br></div><div>        ip link add "${VTI_IF}" type vti local "${PLUTO_ME}" remote "${PLUTO_PEER}" \<br></div><div>            key "${PLUTO_UNIQUEID}"   <br></div><div>        ip link set "${VTI_IF}" mtu 1436<br></div><div>        ip link set "${VTI_IF}" up<br></div><div>        ip route add "${PLUTO_PEER_SOURCEIP}" dev "${VTI_IF}"<br></div><div>        ip rule del pri 220<br></div><div>        sysctl -w net.ipv4.conf.${VTI_IF}.disable_policy=1<br></div><div>        ;;<br></div><div>    down-client)<br></div><div>        ip link del "${VTI_IF}"<br></div><div>        ;;<br></div><div>esac<br></div><div>ip addr add ${PLUTO_MY_SOURCEIP} dev lo || true<br></div><div><br></div><div>root@ubuntu1604:~# ip a<br></div><div>1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1<br></div><div>    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00<br></div><div>    inet 127.0.0.1/8 scope host lo<br></div><div>       valid_lft forever preferred_lft forever<br></div><div>    inet 10.1.1.1/32 scope global lo<br></div><div>       valid_lft forever preferred_lft forever<br></div><div>2: enp0s5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000<br></div><div>    link/ether 00:1c:42:53:83:34 brd ff:ff:ff:ff:ff:ff<br></div><div>    inet 10.2.0.47/24 brd 10.2.0.255 scope global enp0s5<br></div><div>       valid_lft forever preferred_lft forever<br></div><div>3: ip_vti0@NONE: <NOARP> mtu 1332 qdisc noop state DOWN group default qlen 1<br></div><div>    link/ipip 0.0.0.0 brd 0.0.0.0<br></div><div>7: ipsec1@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1436 qdisc noqueue state UNKNOWN group default qlen 1<br></div><div>    link/ipip 10.2.0.47 peer 10.2.0.49<br></div><div>8: ipsec2@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1436 qdisc noqueue state UNKNOWN group default qlen 1<br></div><div>    link/ipip 10.2.0.47 peer 10.2.0.48<br></div><div>root@ubuntu1604:~# ip r<br></div><div>default via 10.2.0.1 dev enp0s5<br></div><div>10.2.0.0/24 dev enp0s5  proto kernel  scope link  src 10.2.0.47<br></div><div>10.1.2.1 dev ipsec1  scope link<br></div><div>10.1.3.1 dev ipsec2  scope link<br></div><div><br></div><div>"Client 1"<br></div><div>root@ubuntu1604:~# ip a<br></div><div>1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1<br></div><div>    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00<br></div><div>    inet 127.0.0.1/8 scope host lo<br></div><div>       valid_lft forever preferred_lft forever<br></div><div>2: enp0s5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000<br></div><div>    link/ether 00:1c:42:86:b5:24 brd ff:ff:ff:ff:ff:ff<br></div><div>    inet 10.2.0.48/24 brd 10.2.0.255 scope global enp0s5<br></div><div>       valid_lft forever preferred_lft forever<br></div><div>3: ip_vti0@NONE: <NOARP> mtu 1332 qdisc noop state DOWN group default qlen 1<br></div><div>    link/ipip 0.0.0.0 brd 0.0.0.0<br></div><div>5: ipsec2@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1436 qdisc noqueue state UNKNOWN group default qlen 1<br></div><div>    link/ipip 10.2.0.48 peer 10.2.0.47<br></div><div>    inet 10.1.3.1/32 scope global ipsec2<br></div><div>       valid_lft forever preferred_lft forever<br></div><div>root@ubuntu1604:~# ip r<br></div><div>default via 10.2.0.1 dev enp0s5<br></div><div>10.2.0.0/24 dev enp0s5  proto kernel  scope link  src 10.2.0.48<br></div><div>10.1.0.0/16 dev ipsec2  scope link<br></div><div><br></div><div>"Client 2"<br></div><div>root@ubuntu1604:~# ip a<br></div><div>1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1<br></div><div>    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00<br></div><div>    inet 127.0.0.1/8 scope host lo<br></div><div>       valid_lft forever preferred_lft forever<br></div><div>2: enp0s5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000<br></div><div>    link/ether 00:1c:42:ef:b6:53 brd ff:ff:ff:ff:ff:ff<br></div><div>    inet 10.2.0.49/24 brd 10.2.0.255 scope global enp0s5<br></div><div>       valid_lft forever preferred_lft forever<br></div><div>3: ip_vti0@NONE: <NOARP> mtu 1332 qdisc noop state DOWN group default qlen 1<br></div><div>    link/ipip 0.0.0.0 brd 0.0.0.0<br></div><div>6: ipsec2@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1436 qdisc noqueue state UNKNOWN group default qlen 1<br></div><div>    link/ipip 10.2.0.49 peer 10.2.0.47<br></div><div>    inet 10.1.2.1/32 scope global ipsec2<br></div><div>       valid_lft forever preferred_lft forever<br></div><div>root@ubuntu1604:~# ip r<br></div><div>default via 10.2.0.1 dev enp0s5<br></div><div>10.2.0.0/24 dev enp0s5  proto kernel  scope link  src 10.2.0.49<br></div><div>10.1.0.0/16 dev ipsec2  scope link<br></div><div><br></div><div>ipsec.conf for Client 1, 2 almost same:<br></div><div>config setup<br></div><div>        charondebug="cfg 2, dmn 2, ike 2, net 2"<br></div><div>conn %default<br></div><div>        keyexchange=ikev2<br></div><div>        reauth=no<br></div><div>        forceencaps=yes<br></div><div>        fragmentation=yes<br></div><div>        compress=no<br></div><div>        dpdaction=restart<br></div><div>        closeaction=restart<br></div><div>        keyingtries=%forever<br></div><div>        ike=aes256gcm16-prfsha384-ecp384!<br></div><div>        esp=aes256gcm16-ecp384!<br></div><div>conn client<br></div><div>        leftupdown=/usr/local/sbin/ipsec-vti.sh<br></div><div>        mark=%unique<br></div><div>        right=%{{ server }}<br></div><div>        rightsubnet=0.0.0.0/0<br></div><div>        leftsourceip=10.1.2.1 (or 10.1.3.1 for other client)<br></div><div>        leftsubnet=0.0.0.0/0<br></div><div>        leftcert=client-cert.pem<br></div><div>        auto=start<br></div><div><br></div><div>ipsec-vti.sh for Client 1, 2:<br></div><div>#!/bin/bash<br></div><div>set -o nounset<br></div><div>set -o errexit<br></div><div>VTI_IF="ipsec${PLUTO_UNIQUEID}"<br></div><div>DEFAULT_IF=`ip route | awk '/default/{ print $5 }'`<br></div><div>case "${PLUTO_VERB}" in<br></div><div>    up-client)<br></div><div>        ip link add "${VTI_IF}" type vti local "${PLUTO_ME}" remote "${PLUTO_PEER}" \<br></div><div>            key "${PLUTO_UNIQUEID}"<br></div><div>        ip addr add ${PLUTO_MY_SOURCEIP} dev "${VTI_IF}"<br></div><div>        ip link set "${VTI_IF}" mtu 1436<br></div><div>        ip link set "${VTI_IF}" up<br></div><div>        ip route add 10.1.0.0/16 dev "${VTI_IF}"<br></div><div>        ip rule del pri 220<br></div><div>        sysctl -w net.ipv4.conf.${VTI_IF}.disable_policy=1<br></div><div>        ;;<br></div><div>    down-client)<br></div><div>        ip link del "${VTI_IF}"<br></div><div>        ;;<br></div><div>esac<br></div><div><br></div><div>install_routes and install_virtual_ip of Charon config is of course disabled.<br></div><div><br></div><div>sysctl everywhere configured to:</div><div>net.ipv4.ip_forward=1<br></div><div>net.ipv4.conf.all.accept_redirects=0<br></div><div>net.ipv4.conf.all.send_redirects=0<br></div><div><br></div><div>On client which will be internet gateway, but it is not important right now because the traffic is even doesn't get this machine:<br></div><div>iptables -t nat -A POSTROUTING -s 10.1.0.0/16 ! -d 10.1.0.0/16 -j MASQUERADE<br></div><div><br></div><div>Firewalls are not configured, iptables ACCEPT everywhere.</div>