Я намагаюся налаштувати tunneldigger для тунелювання трафіку від маршрутизатора OpenWRT до одного з моїх виділених серверів. Сам тунель, здається, встановлюється належним чином, але пакети не маршрутизуються, як я очікую від них.
Для кращого пояснення це налаштування мережі:
+----------+ ens3 +-----------------+ l2tp100-1 l2tp0 +-----------------+
| internet |<----------| server / broker |<--- l2tp tunnel ---> | client / router |
+----------+ +-----------------+ +-----------------+
public IP 10.254.0.2 10.254.0.4
Інтерфейс l2tp0 створюється на клієнті (маршрутизатор OpenWRT), і відповідний інтерфейс l2tpxxx-x створюється на брокері (виділений сервер). Після того, як я підведу обидва інтерфейси, я можу відправити пінг в один інтерфейс і побачити ARPs вийти з іншого:
# on the client
ping -I l2tp0 8.8.8.8
# on the broker/server
tcpdump -i l2tp100-1
00:36:29.925663 ARP, Request who-has google-public-dns-a.google.com tell <client-ip>, length 28
Ці ARP, здається, нікуди не йдуть. Я повинен бути пропущений деякий routing config щоб отримати ці пакети до інтернету.
Я налаштував пересилання в iptables за допомогою:
# ens3 is the interface on the server which has access to the internet
iptables -t nat -A POSTROUTING --out-interface ens3 -j MASQUERADE
# l2tp100-1 is the interface on the server which receives incoming packets from the tunnel
iptables -A FORWARD --in-interface l2tp100-1 -j ACCEPT
Але це не змінює нічого. Тоді я подумав, що маршрут відсутній, тому я спробував додати маршрут з вхідного інтерфейсу l2tp100-1 до інтерфейсу, який має доступ до Інтернету (ens3):
ip route add <subnet>/22 dev l2tp100-1 src <public internet IP>
Це призводить до такої помилки:
RTNETLINK answers: File exists
Однак, показуючи повну таблицю маршрутизації, виконуючи "ip list list table all", взагалі немає запису для l2tp100-1.
Я повинен серйозно помилятися про щось тут, але в чому проблема?