web-dev-qa-db-ja.com

OpenVPN経由で特定のアプリケーションのみをトンネリングする

VPNソリューションを購入しました。構成ファイルに「redirect-gatewaydef1」があると正しく機能します(VPNを介してすべてのトラフィックをルーティングします)。

ただし、構成ファイルからその行を削除しても、マシンからpingアウトできます(ping -I tap0)が、マシンに割り当てられたIP(パブリックIP)にpingできません。エラーが発生します。 :宛先ホストに到達できません。

VPNトンネルを介してトラフィックを送信する特定のアプリケーション(例:ZNC、irssi)のみが必要であり、それらすべてで使用するIPを選択できます。ただし、データを受信できないため、リダイレクトゲートウェイを無効にすると、トンネルは基本的に役に立たなくなります。

すべてを強制的に通過させることなく、特定のアプリケーションがトンネルを使用できるようにする方法についてのアイデアはありますか?

私の設定ファイルは次のとおりです。

dev tap
remote #.#.#.#
float #.#.#.#
port 5129
comp-lzo
ifconfig #.#.#.# 255.255.255.128
route-gateway #.#.#.#
#redirect-gateway def1
secret key.txt
cipher AES-128-CBC

トンネルが接続されている場合のifconfig-aの出力:

tap0      Link encap:Ethernet  HWaddr 00:ff:47:d3:6d:f3  
          inet addr:#.#.#.#  Bcast:#.#.#.#  Mask:255.255.255.255
          inet6 addr: <snip> Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:612 errors:0 dropped:0 overruns:0 frame:0
          TX packets:35 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:25704 (25.1 KiB)  TX bytes:6427 (6.2 KiB)

編集:Bcast:#。#。#。#(ifconfig)は、ルートゲートウェイ#。#。#。#(openvpn)とは異なります。

2
jinjin

私はあなたがiptablesを使ってそれをすることができると思います:

#!/bin/bash
# Create new routing table
echo 200 vpn >> /etc/iproute2/rt_tables

# assign iptables mark "1" to this table
ip rule add fwmark 1 table vpn

#next hop for the new routing table will be trough openvpn
ip route add table vpn eql nexthop via <remotevpnip> dev tap0

#with iptables, add mark "1" to the traffic that must be sent trough the vpn
# Sample using the -m owner iptables module
iptables -t mangle -A OUTPUT -p tcp -m owner --uid-owner <user> -j MARK --set-mark 0x01

これは、icmpではなくudpおよびtcpトラフィックに対して機能します。

2
sntg

VPNのボックスにルートがない可能性があります。 route add [NETWORK ON OTHER SIDE OF VPN] gw [VPNaddress]のようなものでうまくいくはずです。

0