Цель
У нас есть один запущенный сервер OpenVPN (10.8.0.0/16). И некоторые клиенты. Клиентов можно разделить на две конкретные группы: люди и не люди. Люди, не являющиеся людьми, должны иметь доступ только к серверу VPN и нескольким внешним IP-адресам через VPN. Люди, с другой стороны, должны иметь доступ ко всему — особенно к нечеловеческим (нечеловеческие клиенты имеют веб-интерфейс, к которому люди должны дотянуться).
Что работает
К VPN могут подключаться люди и не люди. Доступ, не связанный с людьми, успешно ограничен.
Проблема
При подключении к клиенту-человеку я не могу проверить связь с клиентом, не являющимся человеком, и не могу получить доступ к веб-интерфейсу клиента-человека.
~ ping 10.8.0.2
PING 10.8.0.2 (10.8.0.2) 56(84) bytes of data.
From 10.8.0.1 icmp_seq=2 Redirect Host(New nexthop: 2.0.8.10)
From 10.8.0.1 icmp_seq=3 Redirect Host(New nexthop: 2.0.8.10)
From 10.8.0.1 icmp_seq=4 Redirect Host(New nexthop: 2.0.8.10)
Конфиги
server.conf
local 192.168.12.152
port 1194
proto udp
dev tun0
ca ca.crt
cert server.crt
key server.key
dh dh.pem
auth SHA512
tls-crypt tc.key
topology subnet
server 10.8.0.0 255.255.0.0
client-config-dir /etc/openvpn/ccd
push "redirect-gateway def1 bypass-dhcp"
ifconfig-pool-persist ipp.txt
push "dhcp-option DNS 1.1.1.1"
push "dhcp-option DNS 8.8.8.8"
keepalive 10 120
cipher AES-256-CBC
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3
crl-verify crl.pem
explicit-exit-notify
management 127.0.0.1 5555
sample_client.ovpn (Разница между людьми и не-людьми заключается в ccd, где клиенты получают статический IP-адрес. Люди получают IP-адрес из 10.8.255.0/24, а не-люди из 10.8.xy [x != 255] — так что в ccd есть просто ifconfig-push 10.8.yy 255.255.0.0).
client
dev tun
proto udp
remote some-vpn-dyndns.net 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
auth SHA512
cipher AES-256-CBC
ignore-unknown-option block-outside-dns
block-outside-dns
verb 3
<ca>[...]</ca>
<cert>[...]</cert>
<key>[...]</key>
<tls-crypt>[...]</tls-crypt>
Возможные изменения:
iptables -t nat -A POSTROUTING -s 10.8.0.0/16 ! -d 10.8.0.0/16 -j SNAT --to 192.168.12.152
iptables -I INPUT -p udp --dport 1194 -j ACCEPT
iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD -s 10.8.0.0/16 -j DROP
iptables -I FORWARD -s 10.8.0.0/16 -d 1.1.1.1 -j ACCEPT <---for DNS
iptables -I FORWARD -s 10.8.0.0/16 -d 8.8.8.8 -j ACCEPT <---for DNS
iptables -I FORWARD -s 10.8.0.0/16 -d 213.187.93.146 -j ACCEPT <--- special (dummy) server that non-humans have to reach
iptables -I FORWARD -s 10.8.255.0/24 -j ACCEPT
Это добавляет к этому iptables -L:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:1194
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 10.8.255.0/24 0.0.0.0/0
ACCEPT all -- 10.8.0.0/16 213.187.93.146
ACCEPT all -- 10.8.0.0/16 8.8.8.8
ACCEPT all -- 10.8.0.0/16 1.1.1.1
DROP all -- 10.8.0.0/16 0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
tl; dr Если бы кто-нибудь мог сказать мне, почему я не могу выполнить эхо-запрос от человеческого клиента (10.8.255.1) к нечеловеческому клиенту (10.8.0.2) — это было бы очень хорошо. (Все остальное работает как надо)
Заранее спасибо!