Я пробовал эту статью: http://backreference.org/2010/05/02/controlling-client-to-client-connections-in-openvpn/ но не повезло.
Я новичок в iptables. Не могли бы вы взглянуть на мою конфигурацию?
Контейнер Docker (я использую этот: https://github.com/kylemanna/docker-openvpn) запускается в хозяин сетевой режим
Я использую Centos7 с firewalld
инвалиды и iptables
установлен и включен.
ip_forward включен.
# sysctl net.ipv4.ip_forward net.ipv4.ip_forward = 1
redirect-gateway def1
отключен, так как мне не нужно маршрутизировать интернет-трафик через сервер vpn.
Вот начальные правила iptables.
[root]# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination DOCKER-USER all -- anywhere anywhere DOCKER-ISOLATION all -- anywhere anywhere ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED DOCKER all -- anywhere anywhere ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED DOCKER all -- anywhere anywhere ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain DOCKER (2 references) target prot opt source destination Chain DOCKER-ISOLATION (1 references) target prot opt source destination DROP all -- anywhere anywhere DROP all -- anywhere anywhere RETURN all -- anywhere anywhere Chain DOCKER-USER (1 references) target prot opt source destination RETURN all -- anywhere anywhere
У каждого клиента есть файл конфигурации в ccd
каталог со статическим IP. Вот как я это делаю для одного из клиентов ifconfig-push 10.8.0.102 10.8.0.1
В моем openvpn.conf
у меня есть client-to-client
директива отключена.
у меня есть tun0
iface и 10.8.0.0/24
сеть.
Во-первых, разрешаю уже установленные соединения: iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
Затем я устанавливаю правила пересылки, чтобы 2 клиента могли связаться друг с другом:
iptables -A FORWARD -s 10.8.0.10 -d 10.8.0.102 -j ACCEPT iptables -A FORWARD -s 10.8.0.102 -d 10.8.0.10 -j ACCEPT
В конце концов, это не работает. Когда я выполняю ping 10.8.0.102
с моего MAC (у которого есть ip 10.8.0.10) я получаю:
➜ ~ ping 10.8.0.102 PING 10.8.0.102 (10.8.0.102): 56 data bytes 36 bytes from gwr-vl-201.**** (***.**.**.133): Communication prohibited by filter Vr HL TOS Len ID Flg off TTL Pro cks Src Dst 4 5 00 5400 29e3 0 0000 3d 01 8749 192.168.1.103 10.8.0.102
192.168.1.103 - это мой адрес в локальной сети
Вот моя таблица маршрутов на Mac:
➜ ~ netstat -nr Routing tables Internet: Destination Gateway Flags Refs Use Netif Expire default 192.168.1.1 UGSc 65 0 en0 10.8.0.1 10.8.0.10 UH 0 0 utun1 46.101.242.41/32 192.168.1.1 UGSc 0 0 en0 127 127.0.0.1 UCS 0 0 lo0 127.0.0.1 127.0.0.1 UH 24 2286 lo0 169.254 link#4 UCS 0 0 en0 192.168.1 link#4 UCS 0 0 en0 192.168.1.1/32 link#4 UCS 2 0 en0 192.168.1.1 84:16:f9:c5:c4:da UHLWIir 63 26 en0 1043 192.168.1.103/32 link#4 UCS 0 0 en0 224.0.0/4 link#4 UmCS 1 0 en0 224.0.0.251 1:0:5e:0:0:fb UHmLWI 0 0 en0 255.255.255.255/32 link#4 UCS 0 0 en0
И моя таблица маршрутов на сервере:
[]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 217.182.88.1 0.0.0.0 UG 100 0 0 eth0 10.8.0.0 10.8.0.2 255.255.255.0 UG 0 0 0 tun0 10.8.0.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0 172.19.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-44c0269fbf91 217.**.**.1 0.0.0.0 255.255.255.255 UH 100 0 0 eth0 217.**.**.**1 0.0.0.0 255.255.255.255 UH 100 0 0 eth0
Что мне не хватает?
Заранее спасибо!
Наконец-то я заработал!
Все, что мне нужно было сделать, это добавить push "route 10.8.0.0 255.255.255.0"
в конфиг сервера.
После этого я могу создать произвольные правила пересылки iptables (как я сделал в сообщении выше), а затем добавить
iptables -A FORWARD -j DROPto deny everything else.