Hi,
I have a situation which I hope someone can please help me with.
I have a machine (called jupiter) on our lan. Using it's eth0 NIC (we're
talking linux, of course), jupiter can ping and connect to other machines
on the lan. One machine it can reach (called saturn) acts as a gateway to
a further network of machines (e.g. mimas, rhea, titan, etc.). These
"satellite" machines can not be contacted directly by jupiter, they are
hiding behind saturn. To get at them, jupiter has to set up a strongSwan
tunnel.
Once the tunnel is set up, jupiter can ping and connect to all of saturn's
satellites.
So far, so good.
Now, we also have a network of machines hiding from the lan behind
jupiter. These "satellites" of jupiter (e.g. io, europa, ganymede, etc.)
are connected to jupiter's eth1 NIC. I've turned on ipv4 forwarding on
jupiter and added an iptables nat rule to jupiter to allow these
satellites access to the lan.
However, the problem is that I have not found a way to allow jupiter's
satellites access, through the tunnel, to saturn's satellites ?
Is there something obvious I have missed ?
Now for the details ...
Our default gateway is 192.168.50.1
saturn has ip address 172.16.2.2
saturn's satellites have ip addresses in the range 172.17.x.x, e.g. titan
(one of saturn's satellites) has ip address 172.17.100.151
jupiter has ip address 192.168.50.159 (acquired by dhcp from the lan for
eth0) and 172.16.250.1 (statically assigned by jupiter for eth1).
jupiter's satellites have ip addresses in the range 172.16.250.100-200
served by dnsmasq running on jupiter for eth1.
At start-up, jupiter allows access to the lan for it's satellites via:
iptables -t nat -A POSTROUTING -s 172.16.250.0/24 -o eth0 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
Jupiter then sets up a strongswan (v4.3.2) tunnel using the following
ipsec.conf:
config setup
charondebug="dmn 4, mgr 4, ike 4, chd 4, job 4, cfg 4, knl 4, net 4, enc
4, lib 4"
plutostart=no
conn %default
ikelifetime=24h
keylife=8h
rekeymargin=3m
keyingtries=1
keyexchange=ikev2
conn access-saturn-satellites
left=%defaultroute
[email protected]
leftsendcert=never
leftsourceip=%config
right=saturn.foobar.com
[email protected]
rightsubnet=172.17.0.0/16
authby=eap
forceencaps=yes
ike=aes128-sha-modp1024!
mobike=no
auto=start
With the tunnel set up, ganymede (one of jupiter's satellites) can ping
machines on the lan, but NOT ping saturn's satellites. The icmp request
packets are sent out by jupiter onto the lan (and are therefore ignored)
instead of being sent out over the tunnel to saturn.
r...@jupiter:/opt/strongswan/sbin# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 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: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
UP qlen 1000
link/ether 00:17:3f:9b:8c:ad brd ff:ff:ff:ff:ff:ff
inet 172.16.250.1/24 brd 172.16.250.255 scope global eth1
inet6 fe80::217:3fff:fe9b:8cad/64 scope link
valid_lft forever preferred_lft forever
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
UP qlen 1000
link/ether 00:16:76:ca:bb:27 brd ff:ff:ff:ff:ff:ff
inet 192.168.50.159/24 brd 192.168.50.255 scope global eth0
inet 10.10.2.147/32 scope global eth0
inet6 fe80::216:76ff:feca:bb27/64 scope link
valid_lft forever preferred_lft forever
r...@jupiter:/opt/strongswan/sbin# ip route show
192.168.50.0/24 dev eth0 proto kernel scope link src 192.168.50.159
172.16.250.0/24 dev eth1 proto kernel scope link src 172.16.250.1
169.254.0.0/16 dev eth1 scope link metric 1000
default via 192.168.50.1 dev eth0 metric 100
r...@jupiter:/opt/strongswan/sbin# ip route show table 220
172.17.0.0/16 via 192.168.50.1 dev eth0 proto static src 10.10.2.147
r...@jupiter:/opt/strongswan/sbin# iptables -L -t filter -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 172.17.0.0/16 10.10.2.147 policy match
dir in pol ipsec reqid 1 proto 50
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 172.17.0.0/16 10.10.2.147 policy match
dir in pol ipsec reqid 1 proto 50
ACCEPT all -- 10.10.2.147 172.17.0.0/16 policy match
dir out pol ipsec reqid 1 proto 50
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 10.10.2.147 172.17.0.0/16 policy match
dir out pol ipsec reqid 1 proto 50
r...@jupiter:/opt/strongswan/sbin# iptables -L -t nat -n
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 172.16.250.0/24 0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Couple of limitations, of course.
We can't fiddle with the setup of saturn, sadly. It's a production system
in constant use and can not be changed.
Also, we can't give saturn knowledge of ip addresses being used by
jupiter's satellites. This is because we want to set up further machines
on the lan (e.g. mars, earth, neptune, etc.), each with their own set of
satellites, all using the same address range as jupiter's satellites (e.g.
172.16.250.x) and all connecting ONLY to saturn's satellites. So,
satellites for mars would not need to connect to satellites of jupiter.
Phew! Hope that is not too complicated a situation and that someone can
see the obvious (and, probably, silly) mistake or assumption I've made.
Graham.
_______________________________________________
Users mailing list
[email protected]
https://lists.strongswan.org/mailman/listinfo/users