我已经购买了 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 地址] 的操作应该可以解决问题。