Я настроил Raspberry Pi (на котором работает Raspbian) дома в качестве медиа-сервера, к которому я получаю доступ из-за пределов своей сети через SSH и другие порты (то есть, используя клиент Plex с мобильного через порт 32400). Недавно я решил подписаться на коммерческий сервис VPN. Я установил и настроил OpenVPN на Raspbian.
После долгих часов поиска, чтения и тестирования я узнал, как удаленно подключиться к серверу по ssh, перенаправляя весь трафик с eth0 на tun0. Просто запустив:
ip rule add from <internal IP of SSH server/VPN client> table 10
ip route add default via <internal IP of gateway/router> table 10
Я добавил пару сценариев в /etc/init.d/, чтобы открыть VPN-соединение при загрузке, и другой сценарий, который запускает две команды выше, как только VPN-соединение установлено (кажется, эти правила сбрасываются при перезапуске). Таким образом, с настройкой выше, я могу ssh на свой сервер с работы без проблем.
Моя проблема в том, что в описанной выше среде я не могу локально подключиться к Raspberry Pi. И поэтому мой клиент Plex на PlayStation 4 больше не может найти сервер ... Однако, если я удалю сценарии rc.d, которые 1/ открывают VPN-соединение и 2/ выполняют две вышеупомянутые командные строки, я могу подключиться к серверу из дома и снаружи - но VPN не работает :)
Я думаю, что я делаю что-то не так с IP-маршрутами, но не могу понять, что. Или, может быть, это потому, что порядок, в котором выполняются сценарии, неправильный (хотя команды ip route 'Required-Start' vpnconnection должны быть установлены)
Надеюсь, что все это имеет смысл, и что вы можете указать мне правильные направления в отношении возможности ssh к пи из локальной и удаленной сетей. Я верю, что ответ заключается в использовании либо маршрута, либо толчка, но я не уверен.
Ниже приведены некоторые результаты, которые могут быть полезны.
Заранее спасибо за помощь!
Вывод маршрута -n при создании tun0
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.109.1.5 128.0.0.0 UG 0 0 0 tun0
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
10.109.1.1 10.109.1.5 255.255.255.255 UGH 0 0 0 tun0
10.109.1.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
128.0.0.0 10.109.1.5 128.0.0.0 UG 0 0 0 tun0
168.1.6.49 192.168.0.1 255.255.255.255 UGH 0 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
Вывод iptables -L -v
Chain INPUT (policy DROP 44 packets, 5890 bytes)
pkts bytes target prot opt in out source destination
0 0 fail2ban-ssh tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 22
220 143K ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID
7062 1750K ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:32400
0 0 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:5850
0 0 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:4285
0 0 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:58846
0 0 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8112
1 64 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:72
0 0 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
0 0 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 8
92 15173 ACCEPT all -- * * 192.168.0.0/24 0.0.0.0/0
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 8071 packets, 1231K bytes)
pkts bytes target prot opt in out source destination
Chain fail2ban-ssh (1 references)
pkts bytes target prot opt in out source destination
0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
Файл конфигурации клиента OpenVPN
client
dev tun
proto udp
remote [xxx.yyy.com] [PORT]
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
tls-client
remote-cert-tls server
auth-user-pass
comp-lzo
verb 1
reneg-sec 0
crl-verify crl.pem
auth-user-pass
Вывод sysctl -a | grep \.rp_filter
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.eth0.rp_filter = 0
net.ipv4.conf.lo.rp_filter = 0
net.ipv4.conf.tun0.rp_filter = 0
Вывод ip route show
0: from all lookup local
32765: from 192.168.0.170 lookup 10
32766: from all lookup main
32767: from all lookup default
Вывод ip route show в таблицу 10
default via 192.168.0.1 dev eth0