openWRT の OpenVPN - VPN への接続は成功し、LAN に ping できるが、外部に ping できない (宛先ポートに到達できない)

openWRT の OpenVPN - VPN への接続は成功し、LAN に ping できるが、外部に ping できない (宛先ポートに到達できない)

問題:

ネットワーク外部から OpenVPN 経由でルーターに接続し、すべてのトラフィックを VPN 経由に設定すると、次のものにアクセスできるようになります。

  • ルーター自体

  • ルーターの背後にあるLANホスト

    機能しないもの:

  • LAN外のネットワークアクセス

  • DNS 解決 (DNS は VPN 経由でプッシュされます)

外部 IP に ping を実行すると、「宛先ポートに到達できません」と報告されます。

いかなるリクエストに対しても、tcpdumpは次のように書き込まれます。

12:03:22.070072 IP 10.8.4.2 > 10.8.4.1: ICMP 10.8.4.2 udp port 49763 unreachable, length 93

ここで、10.8.4.2 はクライアント IP であり、10.8.4.1 はサーバーです (ポートは変更されます)。

設定:

  • 内部ネットワーク 192.168.10.0/24 を備えた OpenWRT ルーター (Turris Omnia)
  • OpenVPN はポート 1196 でリッスンしています (オープンでアクセス可能)
  • ルーターのポート 443 を 1196 にリダイレクトする (1196 をブロックするネットワークの場合)
  • ファイアウォールで定義された 3 つのゾーン: vpn、、lanwan
  • クライアント: Android 用 OpenVPN を搭載した Android 8 クライアント (Nexus 5X)

openvpn 設定:

port 1196
proto tcp
dev tun2
ca /etc/openvpn/ca.crt
cert /etc/openvpn/mycrt.crt
key /etc/openvpn/mycrt.key  # This file should be kept secret
dh /etc/openvpn/dh2048.pem
server 10.8.4.0 255.255.255.0
ifconfig-pool-persist /tmp/openvpn/clients/ipp-local.txt
client-config-dir ccd
client-to-client
keepalive 10 120
tls-auth /etc/openvpn/ta.key 0 
comp-lzo no
persist-key
persist-tun
status /tmp/log/openvpn-status.log
verb 3
mute 20
push "route 192.168.10.0 255.255.255.0"
push "route 192.168.20.0 255.255.255.0"
mssfix
cipher AES-256-CBC
auth SHA512
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-256-CBC-SHA:TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA:TLS-DHE-RSA-WITH-AES-128-CBC-SHA:TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA
status /var/log/openvpn-server-status.log
topology subnet

リダイレクトは次の場所で行われますccd/myclient:

push "redirect-gateway local def1"
push "dhcp-option DNS 192.168.10.1"

現在、openWRT 側の構成は次のようになります。

設定ファイル

config openvpn 'local_service'
        option config '/etc/openvpn/server-local.conf'
        option enabled '1'

/etc/config/ネットワーク

config interface 'vpn2'
        option ifname 'tun2'
        option proto 'none'
        option auto '1'

/etc/config/ファイアウォール

config zone
        option input 'ACCEPT'
        option output 'ACCEPT'
        option name 'vpn'
        option masq '1'
        option forward 'ACCEPT'
        option mtu_fix '1'
        option network 'vpn2'

config forwarding
        option dest 'vpn'
        option src 'lan'

config forwarding
        option dest 'lan'
        option src 'vpn'

config forwarding
        option dest 'wan'
        option src 'vpn'

config redirect
        option target 'DNAT'
        option src 'wan'
        option dest 'lan'
        option proto 'tcp'
        option src_dport '443'
        option dest_ip '192.168.10.1'
        option dest_port '1196'
        option name 'openvpn https'

クライアント構成:

# Enables connection to GUI
management /data/user/0/de.blinkt.openvpn/cache/mgmtsocket unix
management-client
management-query-passwords
management-hold

setenv IV_GUI_VER "de.blinkt.openvpn 0.6.73" 
setenv IV_PLAT_VER "27 8.1.0 arm64-v8a google bullhead Nexus 5X"
machine-readable-output
allow-recursive-routing
ifconfig-nowarn
client
verb 4
connect-retry 2 300
resolv-retry 60
dev tun
remote my-remote-gateway.example.com 443 tcp-client
<ca>
REDACTED
</ca>
<key>
REDACTED
</key>
<cert>
REDACTED
</cert>
comp-lzo
<tls-auth>
REDACTED
</tls-auth>
key-direction 1
route 0.0.0.0 0.0.0.0 vpn_gateway
verify-x509-name seldon name
remote-cert-tls server
cipher AES-256-CBC
auth SHA512
# Use system proxy setting
management-query-proxy

答え1

問題は解決しました。実際には問題:

  1. VPN からサーバー外部への転送はファイアウォールによって許可されませんでした。
  2. 指定されたDNS IPはVPN経由で割り当てられたIPとは異なるサブネットを持っており、機能しませんでした

openWRT で と 間の転送を有効にしwanvpnDNS に正しいアドレスを設定することで、問題は解決しました。

関連情報