Я пытаюсь настроить демон OpenVPN в своей сети, но возникают проблемы с маршрутизацией iptables +.
Вот краткий обзор моей конфигурации: - текущая локальная сеть находится на 192.168.2.0/24, демон OpenVPN работает на 192.168.2.251
Демон запускается нормально, но всякий раз, когда я инициирую соединение от клиентов, я вижу эти сообщения:
Mon Feb 5 17:41:59 2018 /sbin/ip link set dev tun0 up mtu 1500
Mon Feb 5 17:41:59 2018 /sbin/ip addr add dev tun0 local 10.8.0.6 peer 10.8.0.5
Mon Feb 5 17:41:59 2018 /sbin/ip route add 192.168.2.251/32 dev br0
RTNETLINK answers: File exists
Mon Feb 5 17:41:59 2018 ERROR: Linux route add command failed: external program exited with error status: 2
Mon Feb 5 17:41:59 2018 /sbin/ip route add 0.0.0.0/1 via 10.8.0.5
Mon Feb 5 17:41:59 2018 /sbin/ip route add 128.0.0.0/1 via 10.8.0.5
Mon Feb 5 17:41:59 2018 /sbin/ip route add 10.8.0.1/32 via 10.8.0.5
Во-первых, почему статус ошибки 2, а во-вторых, почему я вижу добавление маршрута, когда push-маршрут комментируется в файле server.conf демона?
Это одна часть проблемы, другая часть - я не знаю, как «слить» новые правила iptables с моими текущими правилами iptables? В настоящее время у меня есть эти правила в следующем порядке (основная сетевая карта - eth0, openvpn - tun0):
$IPT -F INPUT
$IPT -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
<some other rules>
# VPNd rules
$IPT -A INPUT -i eth0 -p udp --dport 1199 -j ACCEPT #openVPNd runs on udp/1199
$IPT -A INPUT -i tun0 -j ACCEPT
$IPT -A FORWARD -i eth0 -j ACCEPT
$IPT -A OUTPUT -o tun0 -j ACCEPT
<some other rules>
net.ipv4.forwarding = 1 устанавливается в /etc/sysctl.conf
Теперь одним из последствий моих неправильного поведения является то, что клиент, подключающийся к vpn-серверу, не может подключаться к серверам за пределами моей локальной сети (192.168.2.0/24). Я бы хотел, чтобы мои клиенты могли подключаться где угодно по моей ссылке vpn.
Я только что заметил, что приведенные выше сообщения об ошибках, похоже, появляются только на клиентских хостах, которые используют мостовую сеть (некоторые из моих клиентов также являются гипервизорами KVM). В OSX, например, и на моих виртуальных машинах это не отображается. Есть ссылка?
Что мне не хватает?
iptables -vL вывод:
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
3975 963K ACCEPT all -- eth0 any anywhere anywhere state RELATED,ESTABLISHED
5 308 ACCEPT tcp -- eth0 any anywhere anywhere tcp dpt:ssh
0 0 ACCEPT tcp -- eth0 any anywhere anywhere tcp dpt:http
0 0 ACCEPT tcp -- eth0 any anywhere anywhere tcp dpt:https
6 492 ACCEPT udp -- eth0 any anywhere anywhere udp dpt:dmidi
0 0 ACCEPT all -- tun0 any anywhere anywhere
0 0 ACCEPT tcp -- eth0 any anywhere anywhere tcp dpt:grcp
0 0 ACCEPT udp -- eth0 any anywhere anywhere udp dpt:25826
2198 432K REJECT all -- eth0 any anywhere anywhere reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- eth0 any anywhere anywhere
Chain OUTPUT (policy ACCEPT 1552 packets, 225K bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- any tun0 anywhere anywhere
iptables -t nat -VL вывод:
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
(пусто?)
Вывод ip-адреса демона VPN: [19: 28: 50 | jfgratton @ vpntst: ~]: ip addr
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:5f:f8:44 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.251/24 brd 192.168.2.255 scope global eth0
valid_lft forever preferred_lft forever
3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast
state UNKNOWN qlen 100
link/none
inet 10.8.0.1/24 brd 10.8.0.255 scope global tun0
valid_lft forever preferred_lft forever
Все клиенты находятся на одном / 24 (192.168.2.0). Два клиента, находясь в одной подсети, используют мостовые интерфейсы (br0 вместо физического, такого как eth0); Я не думаю, что это важно, но я хочу, так сказать, не оставить камня на камне.
[20:00:45|root@vpntst:~]: iptables -vL;iptables -t nat -vL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
212 17577 ACCEPT all -- eth0 any anywhere anywhere state RELATED,ESTABLISHED
1 60 ACCEPT tcp -- eth0 any anywhere anywhere tcp dpt:ssh
0 0 ACCEPT tcp -- eth0 any anywhere anywhere tcp dpt:http
0 0 ACCEPT tcp -- eth0 any anywhere anywhere tcp dpt:https
0 0 ACCEPT udp -- eth0 any anywhere anywhere udp dpt:dmidi
0 0 ACCEPT all -- tun0 any anywhere anywhere
0 0 ACCEPT tcp -- eth0 any anywhere anywhere tcp dpt:grcp
0 0 ACCEPT udp -- eth0 any anywhere anywhere udp dpt:25826
13 2621 REJECT all -- eth0 any anywhere anywhere reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- eth0 any anywhere anywhere
Chain OUTPUT (policy ACCEPT 144 packets, 16717 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- any tun0 anywhere anywhere
Chain PREROUTING (policy ACCEPT 20 packets, 3509 bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 1 packets, 60 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 12 packets, 912 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 12 packets, 912 bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE all -- any eth0 10.8.0.0/24 anywhere
И мой скрипт брандмауэра: #! / Bin / bash IPT = / sbin / iptables
case "$1" in
start)
$IPT -F INPUT
$IPT -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
$IPT -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
$IPT -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
# VPNd rules
$IPT -A INPUT -i eth0 -p udp --dport 1199 -j ACCEPT
$IPT -A INPUT -i tun0 -j ACCEPT
$IPT -A FORWARD -i eth0 -j ACCEPT
$IPT -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
$IPT -A OUTPUT -o tun0 -j ACCEPT
# Other rules
$IPT -A INPUT -i eth0 -p tcp --dport 9123 -j ACCEPT
$IPT -A INPUT -i eth0 -p udp --dport 25826 -j ACCEPT
$IPT -A INPUT -i eth0 -j REJECT
exit 0
;;
stop)
$IPT -F INPUT
exit 0
;;
* )
echo "Usage: /etc/init.d/firewall {start|stop}"
exit 1
;;
esac
Теперь я выполнил инструкции по установке vpnd из https://chichivica.github.io/2017/08/02/Install-OpenVPN-on-Fedora-26/ . Теперь я понимаю, что там не упоминается маршрутизация или что-то еще. Одна вещь, которую я сделал, и я был уверен, что это необходимо, - это включить пересылку ipv4 в /etc/sysctl.conf. В остальном я строго следовал инструкциям по этой ссылке, больше ничего.
Вот моя конфигурация маршрутизации в server.conf. Я даже пытался несколько минут назад закомментировать последний толчок, к сожалению, результат тот же:
[9:03:07|root@vpntst:openvpn]: egrep "route|redirect" server.conf|egrep -v ^\#
;push "route 192.168.2.0 255.255.255.0"
;push "route 192.168.20.0 255.255.255.0"
;route 192.168.40.128 255.255.255.248
;route 10.9.0.0 255.255.255.252
push "redirect-gateway def1 bypass-dhcp"
Этот сводит меня с ума :-)
На самом деле это не ответ. Я не могу идти дальше, так как мне нужно добавить статические маршруты на мой исходящий маршрутизатор, что мой интернет-провайдер не позволяет мне сделать.
Дело закрыто, пока я не сменю провайдера