web-dev-qa-db-ja.com

OpenVPN:クライアントのLANをVPNに転送する

私の現在のセットアップには、単一のネットワークインターフェイスを備えたopenVPNサーバーと、特定のLANのルーターとして機能する別のネットワーク上のクライアントが含まれます。私の目標は、VPNを介したLANトラフィックの転送を可能にすることです。

LANのルーターは、パブリックインターフェイスを介してopenVPNサーバーに接続するルーターです。

  • openVPNネット:10.8.1.0/24
  • 内部ネットワーク:192.168.10.0/24

ファイアウォール

*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 remote MY_SERVER_IP proto udp nobindresolv-再試行無限persist-keypersist-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

(ここでも、クライアントは実際にはLANのルーターです)

クライアント自体を使用している場合は、tracerouteでパケットがVPNを通過することがわかります。ただし、クライアントから同じIPにアクセスしようとすると、何も実行されません。サーバーのVPNインターフェースのtcpdumpは次のように表示されます。

# 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

また、クライアントのccdディレクトリにiroute 192.168.10.0 255.255.255.0を設定しました。ただし、LANからVPN経由でトラフィックをルーティングすることはできません。おそらく、サーバーがデータをVPNに送り返す方法を知らないためです。

これを実行するために何が欠けていますか?サーバーとクライアント/ルーターにフルアクセスできます。サーバーはCentOS6.5とクライアント/ルーターDebianSqueezeを実行します。

2
Einar

解決策は、クライアント/ルーターで、

iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o tun1 -j MASQUERADE

どこ tun1はVPNインターフェースです。内部IPをマスカレードすることにより、すべてが機能します。

3
Einar