У меня есть устройство Ubuntu с включенным OpenVPN и подключенное к локальной сети за маршрутизатором TP-Link. Вот что известно:
- Находясь внутри локальной сети, я могу подключиться к устройству напрямую через SSH (VPN запущена или остановлена).
- Когда вне локальной сети и OpenVPN остановлен, я могу подключиться к устройству через переадресацию портов (порт WAN 22106).
- Когда за пределами локальной сети запущен OpenVPN, я больше не могу подключиться к устройству через SSH через реальный IP-адрес.
- В
iptables -L
нет ничего особенного, только шум UFW
Любые идеи, как SSH в устройство через реальный IP-провайдер, а не VPN-IP, когда VPN-соединение установлено?
Решение:
Вот одно полное решение, которое сработало. Создайте виртуальный адаптер, назначьте ему неиспользуемый соседний IP-адрес и добавьте правило и таблицу поиска, чтобы использовать тот же интерфейс для исходящих пакетов. Кроме того, перенаправьте порт WAN на порт устройства 22 с этим новым статическим IP-адресом.
ip addr add 192.168.0.6 dev eth0:0
ip rule add from 192.168.0.6 table 1234
ip route add default via 192.168.0.1 dev eth0:0 table 1234
Предыдущие попытки:
Вот все мои неудачные попытки от различных решений вокруг Stack Exchange.
cat /etc/iproute2/rt_tables
echo 200 isp2 >> /etc/iproute2/rt_tables
## FAILED - Direct ISP IP SSH okay, LAN SSH blocked
ip rule add from 192.168.0.106 table isp2
ip route add default via 192.168.0.1 dev eth0 table isp2
## FAILED - Direct ISP IP SSH okay, LAN SSH blocked
ip rule add from 192.168.0.106 table isp2 priority 900
ip rule add from dev eth0 table isp2 priority 1000
ip route add default via 192.168.0.1 dev eth0 table isp2
ip rule add iif eth0 table isp2 priority 1000
## FAILED - No effect
iptables -A PREROUTING -t mangle -p tcp --dport 222 -j MARK --set-mark 1
ip rule add fwmark 1 table isp2
ip route add default via 192.168.0.1 dev eth0 table isp2
## FAILED - No effect
iptables -t mangle -A OUTPUT -p tcp --dport 222 -o eth0 -j MARK --set-mark 1
ip rule add fwmark 1 table isp2
ip route add 0.0.0.0/0 table isp2 dev eth0
## FAILED - No effect
ip rule add from 192.168.0.106 table isp2
ip route add table isp2 to 192.168.0.106/32 dev eth0
ip route add table isp2 default via 192.168.0.1
## FAILED - No effect
iptables -t mangle -A PREROUTING -i eth0 -m conntrack --ctstate NEW -j CONNMARK --set-mark 1234
iptables -t mangle -A OUTPUT -m connmark --mark 1234 -j MARK --set-mark 4321
ip route add default dev eth0 table 3412
ip rule add fwmark 4321 table 3412
## FAILED - Direct ISP IP SSH okay, LAN SSH blocked
iptables -t mangle -A PREROUTING -i eth0 -m conntrack --ctstate NEW -j CONNMARK --set-mark 1234
iptables -t mangle -A OUTPUT -m connmark --mark 1234 -j MARK --set-mark 4321
ip route add default via 192.168.0.1 dev eth0 table 3412
ip rule add fwmark 4321 table 3412
## FAILED - Direct ISP IP SSH okay, LAN SSH blocked
iptables -t mangle -A PREROUTING -i eth0 -m conntrack --ctstate NEW -j CONNMARK --set-mark 1234
iptables -t mangle -A OUTPUT -m connmark --mark 1234 -j MARK --set-mark 4321
ip route add default via 192.168.0.1 dev eth0 table isp2
ip rule add fwmark 4321 table isp2
Обновление: больше неудачных попыток
## FAILED
iptables -t mangle -A OUTPUT -p tcp --dport 22106 -o eth0 -j MARK --set-mark 1 && \
iptables -t mangle -A OUTPUT -p tcp --dport 222 -o eth0 -j MARK --set-mark 1 && \
iptables -t mangle -A OUTPUT -p tcp --dport 22 -o eth0 -j MARK --set-mark 1 && \
ip rule add fwmark 1 table isp2 && \
ip route add default via 192.168.0.1 dev eth0 table isp2
Обновление: Добавлен вывод обмена tcpdump между sshd (192.168.0.106:22) и машиной локальной сети (192.168.0.114). Пакеты ACK отправляются обратно по eth0, но не достигают машины .114. На данный момент я могу ssh извне локальной сети, но внутри локальной сети не удается. Добавлены только следующие правила ip:
# WAN SSH okay, LAN SSH fails
ip rule add from 192.168.0.106 table isp2
ip route add default via 192.168.0.1 dev eth0 table isp2
Сервер WAN (статический IP) <-> Маршрутизатор <-> (192.168.0.106)
Попытка переадресации маршрутизатора:
22106/TCP --> 192.168.0.106:22 (same result as above)
22106/TCP --> 192.168.0.106:22106 (same result as above)
ip a
адрес устройства при запуске OpenVPN:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:1e:06:36:2b:05 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.106/24 brd 192.168.0.255 scope global dynamic noprefixroute eth0
valid_lft 3068726852sec preferred_lft 3068726852sec
inet6 fe80::a15b:2d6f:2dc9:8892/64 scope link noprefixroute
valid_lft forever preferred_lft forever
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
link/none
inet 10.7.0.10 peer 10.7.0.9/32 scope global tun0
valid_lft forever preferred_lft forever
inet6 fe80::7d84:a8cc:f96e:6f11/64 scope link stable-privacy
valid_lft forever preferred_lft forever
Устройство /etc/ssh/sshd_config
(все остальное по умолчанию и закомментировано):
Port 22
Port 22106
ListenAddress 192.168.0.106:22
ListenAddress 0.0.0.0:22106
AllowAgentForwarding yes
AllowTcpForwarding all
GatewayPorts yes
X11Forwarding yes
PermitTunnel yes
DisableForwarding no
Устройство netstat -tlpn
:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 455/systemd-resolve
tcp 0 0 0.0.0.0:22106 0.0.0.0:* LISTEN 9312/sshd
tcp 0 0 192.168.0.106:22 0.0.0.0:* LISTEN 9312/sshd
Состояние устройства ufw status
:
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
22106/tcp ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
22106/tcp (v6) ALLOW Anywhere (v6)