Цель состоит в том, чтобы иметь основной сервер OpenVPN и несколько подсетей OpenVPN, доступных для клиентов основного сервера. Серверы всех подсетей также являются клиентами главного сервера.
Вот конфиги:
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
server 10.0.0.0 255.255.0.0
push "route 10.0.0.0 255.255.0.0"
push "route 10.1.0.0 255.255.0.0"
client-config-dir ccd
client-to-client
keepalive 10 120
tls-server
tls-auth ta.key 0
comp-lzo
ccd/subserver1
ifconfig-push 10.0.0.6 10.0.0.5
iroute 10.1.0.0 255.255.0.0
client
dev tun
proto udp
remote <ip> 1194
remote-random
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert subserver1.crt
key subserver1.key
tls-client
tls-auth ta.key 1
cipher BF-CBC
comp-lzo
verb 3
pull
port 1195
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
server 10.1.0.0 255.255.0.0
push "route 10.0.0.0 255.255.0.0"
push "route 10.1.0.0 255.255.0.0"
client-to-client
keepalive 10 120
tls-server
tls-auth ta.key 0
comp-lzo
persist-key
persist-tun
iptables -t nat -A POSTROUTING -s 10.0.0.0/16 -o eth0 -j MASQUERADE
Полагаю, в iptables чего-то не хватает, у меня недостаточно опыта, чтобы в этом разобраться. Самое простое - использовать push "dhcp-option DNS 10.1.0.1"
опция в конфигурации главного сервера. Есть ли способ настроить DNS-сервер поверх OpenVPN-сервера? Или любой другой способ справиться с этим?
ОБНОВЛЕНИЕ (2.03.2016)
Вот чего мне удалось добиться: Диаграмма сети
Маршруты основных серверов:
0.0.0.0 <external ip> 0.0.0.0 UG 0 0 0 eth0
10.0.0.0 10.0.0.2 255.255.0.0 UG 0 0 0 tun0
10.0.0.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
10.1.0.0 10.0.0.2 255.255.0.0 UG 0 0 0 tun0
10.2.0.0 10.0.0.2 255.255.0.0 UG 0 0 0 tun0
Subserver1 маршруты:
0.0.0.0 <external ip> 0.0.0.0 UG 0 0 0 eth0
10.0.0.0 10.0.0.5 255.255.0.0 UG 0 0 0 tun1
10.0.0.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun1
10.1.0.0 10.1.0.2 255.255.0.0 UG 0 0 0 tun0
10.1.0.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
10.2.0.0 10.0.0.5 255.255.0.0 UG 0 0 0 tun1
Client1 маршруты:
0.0.0.0 <external ip> 0.0.0.0 UG 0 0 0 eth0
10.1.0.0 10.1.0.5 255.255.0.0 UG 0 0 0 tun0
10.1.0.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
С этим я мог ssh для субсерверов от суперпользователя, используя как tun0, так и tun1 ips (и это меня сильно смущает). После этого я смог подключиться к клиентам, но теперь прямое подключение. Я уверен, что пропустил последний шаг, но не могу понять.
iptables -A FORWARD -s 10.0.0.0/16 -d 10.1.0.0/16 -j ACCEPT
на subserver1 ничего не менял.
ОБНОВЛЕНИЕ (3.03.2016)
root@stage:~# iptables -L -nv
Chain INPUT (policy ACCEPT 212K packets, 40M bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
74 5416 ACCEPT all -- tun0 eth0 10.0.0.0/16 10.1.0.0/16 ctstate NEW
Chain OUTPUT (policy ACCEPT 223K packets, 34M bytes)
pkts bytes target prot opt in out source destination
root@stage:~# iptables -t nat -L -nv
Chain PREROUTING (policy ACCEPT 9664 packets, 695K bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 9641 packets, 694K bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 29987 packets, 2269K bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 29828 packets, 2260K bytes)
pkts bytes target prot opt in out source destination
179 11363 MASQUERADE all -- * * 10.0.0.0/16 10.1.0.0/16
На всех остальных машинах нет правил iptables.