我正在寻找一种解决scheme,通过OpenVPN从服务器路由所有stream量,但保留在服务器上可以在局域网之外访问应用程序的可能性。
更具体一些:服务器上有两个应用程序托pipe。 有一个绑定端口80的应用程序和一个绑定端口8080的应用程序。进出这些服务的所有通信必须直接进行,所有其他通信必须通过VPN通道。
目前,请求正在直接接收,但在VPN运行时没有应答。 当我禁用VPN时,所有服务都可以达到:
我怎样才能configurationOpenVPN,例如一个向上的脚本,以便这些路由将被正确路由?
我的networking接口概述:
lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:537169 errors:0 dropped:0 overruns:0 frame:0 TX packets:537169 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:147901148 (147.9 MB) TX bytes:147901148 (147.9 MB) p4p1 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx inet addr:192.168.2.201 Bcast:192.168.2.255 Mask:255.255.255.0 inet6 addr: xxx/64 Scope:Global inet6 addr: xxx/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:8062700 errors:0 dropped:180 overruns:0 frame:0 TX packets:10937639 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:7942028079 (7.9 GB) TX bytes:12229412785 (12.2 GB) tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:XX PtP:XX Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:6382168 errors:0 dropped:0 overruns:0 frame:0 TX packets:6004894 errors:0 dropped:46397 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:7066816609 (7.0 GB) TX bytes:4808493953 (4.8 GB)
连接VPN之前的路由表:
ip route show default via 192.168.2.254 dev p4p1 192.168.2.0/24 dev p4p1 proto kernel scope link src 192.168.2.201
与VPN连接后的路由表:
ip route show 0.0.0.0/1 via 10.124.1.5 dev tun0 default via 192.168.2.254 dev p4p1 10.124.1.1 via 10.124.1.5 dev tun0 10.124.1.5 dev tun0 proto kernel scope link src 10.124.1.6 109.201.154.152 via 192.168.2.254 dev p4p1 128.0.0.0/1 via 10.124.1.5 dev tun0 192.168.2.0/24 dev p4p1 proto kernel scope link src 192.168.2.201
我有和你一样的问题。 您必须禁用rp_filter,并将目标端口为80和8080的所有通信redirect到正常的接口。
for i in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 0 > $i done
ip route flush table 100 ip route del default table 100 ip rule del fwmark 1 table 100 ip route flush cache iptables -t mangle -F PREROUTING
ip route show table main | grep -Ev ^default | grep -Ev tun0 \ | while read ROUTE ; do ip route add table 100 $ROUTE done ip route add default table 100 via 192.168.2.254 ip rule add fwmark 1 table 100 ip route flush cache
iptables -t mangle -A PREROUTING -i p4p1 -p tcp -m multiport --dports 80,8080 -j MARK --set-mark 1
当然,这是(可能的) – 基于策略的路由,他们称之为。
您可以使用防火墙标记,然后利用ip rule 。
LARTC是你正在仔细阅读的东西。
您可以忽略或覆盖从服务器redirect-gateway选项推送。 https://community.openvpn.net/openvpn/wiki/IgnoreRedirectGateway
忽略redirect网关
如果你运行OpenVPN作为一个客户端,而你使用的服务器是使用推送“redirect网关”,那么你的客户端通过VPNredirect所有的互联网stream量。 有时客户不需要这个,但是他们不能改变服务器的configuration。 这个页面解释了如何覆盖redirect网关,所以客户端不需要redirect互联网即使服务器说。 方法1:忽略
有两个选项可以用来忽略服务器推送的路由:
–route-noexec不要自动添加或删除路由。 而是使用环境variables传递路由到 – 路由脚本。
–route-nopull与–client或–pull一起使用时,接受由服务器推送的选项EXCEPT用于路由和dhcp选项(如DNS服务器)。 在客户端上使用时,该选项可以有效地阻止服务器将路由添加到客户端的路由表中,但请注意,该选项仍然允许服务器设置客户端的TUN / TAP接口的TCP / IP属性。
方法2:覆盖
这里我们将简单地添加覆盖–redirect-gateway的路由。 这将非常像def1标志到–redirect-gateway工作。 如果服务器将def1标志用于–redirect-gateway选项,则可能会有所不同(通过在连接时检查日志)。 请注意,net_gateway是openvpn的内部variables,不需要更改为任何内容。 如果你不知道你的服务器是否使用了def1,并且不想检查日志,那么假设他们使用了def1并且使用了4条路由。 无论如何,这将起作用。
def1 – 使用此标志覆盖默认网关,使用0.0.0.0/1和128.0.0.0/1而不是0.0.0.0/0。 这具有重写但不消除原始默认网关的优点。
如果服务器不使用def1,请将以下选项添加到客户端configuration中:
路由0.0.0.0 128.0.0.0 net_gateway路由128.0.0.0 128.0.0.0 net_gateway
如果服务器使用def1或者您不知道,请将以下选项添加到客户端configuration中:
路由0.0.0.0 192.0.0.0 net_gateway路由64.0.0.0 192.0.0.0 net_gateway路由128.0.0.0 192.0.0.0 net_gateway路由192.0.0.0 192.0.0.0 net_gateway
然后来自外部的stream量将通过普通网关进行传输,VPN子网中的stream量将进入VPN。 如果VPN子网后面是其他networking,您将不得不手动添加路由。
路由10.0.0.0 255.255.255.0 vpn_gateway
我相信正确的解决scheme将是分割隧道 ,或者是我将在客户端工作站执行的操作,但是您的情况稍有不同,因为有一个服务器:是否可以添加第二个networking接口?
在这种情况下,您可以通过第一个接口路由所有的VPNstream量,然后让您的服务由第二个接口监听。