最后,我得到了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,因此它们也会直接从默认网关路由。 解决这个问题的唯一方法是使用基于端口的路由,它的设置是这样的:
创build一个新的路由表(只需要做一次):
echo 1 vpn >> /etc/iproute2/rt_table
使用这个新表通过VPN路由一切:
ip route add default via 10.8.0.1 table vpn
告诉内核对具有特定防火墙标记的所有数据包使用这个新表:
ip rule add fwmark 0x01 lookup vpn
设置防火墙规则来标记要通过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。