将stream量从VPN路由到不同的networking设备

最后,我得到了OpenVPN运行,但现在我真的很想念通过VPN服务器访问我所有的Web服务(Apache,FTP,SSH等)。 有一个简单的方法来路由从我的wlan1设备到tap0的所有stream量?

为server.conf:

port 1193 proto tcp dev tap0 ca ca.crt cert server.crt key server.key # This file should be kept secret dh dh1024.pem ifconfig-pool-persist ipp.txt server 10.8.0.0 255.255.255.0 keepalive 10 120 ;tls-auth ta.key 0 # This file is secret comp-lzo user nobody group nogroup persist-key persist-tun status openvpn-status.log verb 3 script-security 2 

我其实希望这个前进能解决问题,但事实并非如此:

 /sbin/iptables -t nat -A POSTROUTING -o wlan1 -j MASQUERADE /sbin/iptables -A FORWARD -i wlan -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT /sbin/iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT 

build立:

这基本上是我的设置: DSL router -> Wireless router -> Ubuntu server

Ubuntu server我托pipe了apache,ssh和其他服务器应用程序和服务。 当客户端通过VPN访问我的服务器时,我想访问所有这些服务。

你还没有提供太多的细节,所以我猜测你的设置如下。 您通常通过其公有IP(或parsing为它的主机名)访问服务器上的服务,例如http://1.2.3.4/ 。 当您启动VPN时,OpenVPN连接到相同的公共IP 1.2.3.4,并且当VPN启动时,您使用服务器的私有VPN IP访问服务,例如http://10.8.0.1/ 。 无论VPN是否启动,您都希望能够使用公共IP。

最好的解决scheme是为OpenVPN服务器使用单独的IP,因为它极大地简化了路由。 我假设你没有这个选项。

问题在于,即使在通过VPN路由所有stream量时,VPN服务器公共IP上的stream量也必须从默认网关路由出去,以便encryption的VPN数据包能够真正到达那里。 路由表看起来像这样:

 192.168.0.0/24 dev eth0 1.2.3.4/32 via 192.168.0.1 10.8.0.1/32 dev tun0 default via 10.8.0.1 

由于您尝试访问的其他服务使用与VPN服务器相同的IP,因此它们也会直接从默认网关路由。 解决这个问题的唯一方法是使用基于端口的路由,它的设置是这样的:

  1. 创build一个新的路由表(只需要做一次):

     echo 1 vpn >> /etc/iproute2/rt_table 
  2. 使用这个新表通过VPN路由一切:

     ip route add default via 10.8.0.1 table vpn 
  3. 告诉内核对具有特定防火墙标记的所有数据包使用这个新表:

     ip rule add fwmark 0x01 lookup vpn 
  4. 设置防火墙规则来标记要通过VPN路由的数据包:

     iptables -t mangle -A OUTPUT -p tcp -j MARK --set-mark 0x01 iptables -t mangle -A OUTPUT -p udp ! --dport 1193 -j MARK --set-mark 0x01 

您可能需要在客户端上的一个脚本中设置它,然后用down脚本将其closures。