仅通过 OpenVPN 隧道传输某些应用程序

仅通过 OpenVPN 隧道传输某些应用程序

我已经购买了 VPN 解决方案,当我在配置文件中有“redirect-gateway def1”(通过 VPN 路由所有流量)时,它可以正常工作。

但是,当我从配置文件中删除该行时,我仍然能够 ping 出机器(ping -I tap0),但我无法 ping 分配给机器的 IP(它是一个公共 IP),我收到错误:目标主机不可达。

我只想让某些应用程序通过 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)与route-gateway#.#.#.#(openvpn)不同。

答案1

我认为你可以使用 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

这适用于 udp 和 tcp 流量,不适用于 icmp。

答案2

您的盒子上可能缺少 VPN 路由。类似 route add [VPN 另一侧的网络] gw [VPN 地址] 的操作应该可以解决问题。

相关内容