Разрешить клиенту общение в OpenVPN для определенного диапазона IP-адресов

Цель

У нас есть один запущенный сервер 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) — это было бы очень хорошо. (Все остальное работает как надо)

Заранее спасибо!

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *