Моя текущая установка включает в себя сервер openVPN с одним сетевым интерфейсом и клиента в другой сети, который действует как маршрутизатор для конкретной локальной сети. Моя цель - разрешить пересылку трафика LAN через VPN.
Маршрутизатор локальной сети - это тот, который подключается к серверу openVPN через его общедоступный интерфейс.
Брандмауэр
*nat
:PREROUTING ACCEPT [2:98]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [5:327]
-A POSTROUTING -s 10.8.1.0/24 -o em1 -j MASQUERADE
COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [186:19694]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p udp -m state --state NEW,ESTABLISHED -m udp --dport 1195 -j ACCEPT
-A INPUT -i tun+ -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -i tun+ -j ACCEPT
-A FORWARD -s 10.8.1.0/24 -o em1 -j ACCEPT
-A FORWARD -i tun+ -o em1 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i em1 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
OpenVPN сервер
port 1195 # 1194 is used by another OpenVPN
proto udp
dev tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/suzume.crt
key /etc/openvpn/suzume.key
server 10.8.1.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
client-config-dir ccd
route 192.168.10.0 255.255.255.0
tls-auth /etc/openvpn/ta.key 0
Клиент OpenVPN
client dev tun удаленный MY_SERVER_IP proto udp nobind resolv-retry infinite persist-key persist-tun ca ca.crt cert myhostname.crt key myhostname.key ns-cert-type server tls-auth ta.key 1 comp-lzo verb 3 mtu- тест
Прямо сейчас я еще не нажимаю на шлюз по умолчанию: я делаю тесты, добавляя отдельные IP-адреса в таблицу маршрутизации. На клиенте:
route add 69.192.17.215 gw 10.8.1.5 tun1
(опять же, клиент на самом деле является маршрутизатором для локальной сети)
Если я нахожусь на самом клиенте, я могу видеть с traceroute
что пакеты проходят через VPN. Однако, если я пытаюсь получить доступ к тому же IP от клиентов, ничего не проходит. tcpdump на интерфейсе VPN на сервере показывает:
# tcpdump -n -i tun0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size 65535 bytes
00:25:13.267823 IP MY_INTERNAL_IP > 69.192.17.215: ICMP echo request, id 3607, seq 11, length 64
И ничего не проходит.
Сравните это, когда я делаю что-то прямо на клиенте:
00:28:10.277901 IP OPENVPN_CLIENT_IP > 69.192.17.215: ICMP echo request, id 5243, seq 1, length 64
00:28:10.365054 IP 69.192.17.215 > OPENVPN_CLIENT_IP: ICMP echo reply, id 5243, seq 1, length 64
Я также установил iroute 192.168.10.0 255.255.255.0
в моем ccd
dir для клиента. Однако я не могу маршрутизировать трафик из локальной сети через VPN, предположительно потому, что сервер не знает, как отправлять им данные.
Что мне не хватает для этого? У меня есть полный доступ на сервере и на клиенте / роутере. На сервере работает CentOS 6.5 и клиент / маршрутизатор Debian Squeeze.
Решение заключалось в том, чтобы на клиенте / маршрутизаторе сделать
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o tun1 -j MASQUERADE
где tun1
это интерфейс VPN. Маскируя внутренние IP-адреса, все работает.