Проблема с настройкой Iptables для настройки VPN
Я пытаюсь настроить RaspberryPi для работы в качестве маршрутизатора в настройке VPN:
RPI3
Raspbian, 10, Buster
kernel 5.10.63-v7+
iptables v1.8.2 (nf_tables)
RPi имеет интерфейс для внутренней сети eth0. У него есть интерфейс для VPN, предоставляемый ZeroTier, я переименовал его в vpn0, чтобы этот пост было легче читать:
Internal network: eth0
ZeroTier VPN: vpn0
Во внутренней сети есть NAS, который является моей целью. Они находятся в одной подсети.
Rpi: 10.0.0.111 (eth0)
NAS: 10.0.0.120
Моя цель - подключиться к NAS через VPN с помощью:
SSH (vpn0 port 8022 -- 10.0.0.120:22)
HTTP (vpn0 port 8000 -- 10.0.0.120:8000)
Мне еще не удалось установить соединение ни с одним NAT. Я вижу трафик на стороне vpn0, когда пытаюсь установить соединение (iptables -t nat -nvL, проверяя количество пакетов), но соединения всегда терпят неудачу. Пытаясь отладить соединение ssh, я поднял уровень журнала sshd на NAS до DEBUG3 и ничего не вижу в журналах, поэтому я предполагаю, что попытка подключения не дойдет до 10.0.0.120:22. Я бы хотел, чтобы Wireshark установил связь между RPi и NAS, но я не могу. Все это делается удаленно. Я могу подключиться к RPi по SSH через интерфейс vpn0, чтобы настроить его. Оттуда я могу подключиться к NAS по SSH через интерфейс eth0. Я хочу иметь возможность подключаться к NAS по SSH через интерфейс vpn0 (с маршрутизацией соединения RPi).
Пока что на RPi я:
- Активировал маршрутизацию в /etc/sysctl.conf: net.ipv4.ip_forward=1
- Проверено, что / proc / sys / net / ipv4 / ip_forward имеет значение «1».
- Проверено, что оба интерфейса настроены на пересылку:
/proc/sys/net/ipv4/conf/eth0/forwarding is "1"
/proc/sys/net/ipv4/conf/vpn0/forwarding is "1"
- Добавлены следующие правила таблицы:
# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 1169 packets, 317K bytes)
pkts bytes target prot opt in out source destination
3 156 DNAT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8022 to:10.0.0.120:22
10 520 DNAT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8000 to:10.0.0.120:8000
Chain INPUT (policy ACCEPT 280 packets, 51841 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 11384 packets, 680K bytes)
pkts bytes target prot opt in out source destination
2 166 MASQUERADE all -- * vpn0 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 11369 packets, 679K bytes)
pkts bytes target prot opt in out source destination
- Я добавил в FORWARD следующее:
# iptables --list FORWARD
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere 10.0.0.120 tcp dpt:8000 state NEW,RELATED,ESTABLISHED
ACCEPT tcp -- anywhere 10.0.0.120 tcp dpt:8022 state NEW,RELATED,ESTABLISHED
- Это было сделано с помощью следующих команд:
iptables -t nat -A POSTROUTING -o vpn0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o vpn0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i vpn0 -o eth0 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 8000 -j DNAT --to-destination 10.0.0.120:8000
iptables -t nat -A PREROUTING -p tcp --dport 8022 -j DNAT --to-destination 10.0.0.120:22
iptables -A FORWARD -p tcp -d 10.0.0.120 --dport 8022 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp -d 10.0.0.120 --dport 8000 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
Примечание. Я попробовал оба правила NAT, указав "in" интерфейс как vpn0, но соединение по-прежнему отсутствовало. Я ослабил его до *, чтобы правила были более свободными.
Мне уже нечего проверить. Судя по другим сообщениям, которые я прочитал, похоже, что он должен работать, но я подозреваю, что ищу проблему не в том месте. Я вернулся в RTFM. Кто-нибудь, кто хорошо разбирается в iptables, знает, где искать проблему?