更新

更新

我有一个 Ubuntu 服务器,其中安装了 OpenVPN、Minecraft、TeamSpeak3 和其他应用程序。

我能够通过 SSH 进入它,为我的 NAS 使用 Samba,甚至可以让我的每台计算机一起成功使用 TS3 和 Minecraft;所有这些都在 LAN 上。我的目标是允许 Minecraft 和 TS3 端口在我的 LAN 之外可访问。

我的 ISP 调制解调器将端口转发到子网的路由器,然后该路由器将端口转发到服务器。太棒了。Minecraft 和 TS3 可以运行,并且可以访问之内无论 VPN 是 UP 还是 DOWN,LAN 都会处于连接状态。

我想保留 VPN,但将 Minecraft 和 TS3 排除在 VPN 路由之外。

我该如何配置路线?

更新

我希望外部客户端(未知操作系统)能够连接到托管在内部 Ubuntu Server 16.04 上的 MC 和 TS 服务器。

Ubuntu 服务器托管 MC、TS、Samba 服务、Plex、uTorrent 和 SickRage。OpenVPN 也在这里运行。

我的 ISP 路由器未经修改,子网路由器是未经修改的 ASUS。我确实打开了相应的端口,并将其以菊花链形式转发到 Ubuntu 服务器。

我的内部客户端由 OS X、Windows 10 和各种 Android 版本组成。每个内部客户端都可以使用服务器内部分配的 IP 访问上面列出的 Ubuntu 服务。

此外,Ubuntu Server 上的 iptables 是完全开放的,一旦我弄清楚如何让 MC 和 TS 正常工作,我就可以添加额外的限制。

sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

更新2 我刚刚检查了我的路由器,并验证了端口转发和防火墙例外情况。一切正常。在 CLI 中,我运行sudo /etc/init.d/openvpn stop并访问了http://www.yougetsignal.com/tools/open-ports/

返回结果:Port 10011 is open on 97.*.*.*

sudo /etc/init.d/openvpn start导致:Port 10011 is closed on 97.*.*.*

配置文件

enp2s0    Link encap:Ethernet  HWaddr 50:e5...
          inet addr:192.168.1.89  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::52e5:49ff:fedd:d345/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:29183 errors:0 dropped:1 overruns:0 frame:0
          TX packets:5791 errors:0 dropped:0 overruns:0 carrier:1
          collisions:0 txqueuelen:1000
          RX bytes:5338487 (5.3 MB)  TX bytes:770420 (770.4 KB)

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:3772 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3772 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:679389 (679.3 KB)  TX bytes:679389 (679.3 KB)

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:10.*.*.*  P-t-P:10.*.*.*  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:371 errors:0 dropped:0 overruns:0 frame:0
          TX packets:647 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:101055 (101.0 KB)  TX bytes:83561 (83.5 KB)

oVPN 配置

client
dev tun
proto udp
remote vpnprovider.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
tls-client
remote-cert-tls server
auth-user-pass login.conf
comp-lzo
verb 1
reneg-sec 0
crl-verify crl.pem

答案1

根据您的更新,需要检查以下几点:

航线

你问的是怎样配置路线。

根据以上信息,Ubuntu 服务器需要知道通过子网路由器的内部接口到互联网的路由,而子网路由器需要知道通过 ISP 路由器的内部接口到互联网的路由(如果它充当路由器)。此外,ISP 路由器需要知道通过子网路由器的外部接口到您的内部 LAN 的路由。

但是,我认为路由是没问题的,因为您已经能够在 Ubuntu 服务器中使用 OpenVPN。

端口

所有必要的端口都必须通过任何防火墙,即 Ubuntu 服务器、子网路由器和 ISP 路由器。这些是

Port 25565 TCP and UDP for Minecraft
Port 9987 UDP, 10011 TCP and 30033 TCP for TeamSpeak3
just like (usually)
Port 1194 UDP for OpenVPN

因此,假设您的 ISP 路由器具有转发端口的功能并且需要转发端口,则应将 ISP 路由器设置为将这些端口转发到 Ubuntu 服务器。由于 ISP 路由器知道到 Ubuntu 服务器 IP 的路由,因此它会将数据包发送到子网路由器。

同样在子网路由器上,必须打开上述端口并转发到 Ubuntu 服务器。

更新

事实证明,客户端模式的 OpenVPN 正用于连接远程 VPN 服务器。

替代方案 A

您可以建议 OpenVPN 客户端不要更改您的默认网关。这将使您的 VPN 变得无用,具体取决于您想要使用该 VPN 的场景。此替代方案将允许您访问 VPN 服务器及其背后的网络。(我使用它来管理我家里的 PC,同时能够在没有 VPN 的情况下浏览互联网)。

添加

route-nopull
route <vpn.servers.ip.address> 255.255.255.0

并且可选地,取决于您的设置

route-metric 50

配置将

  • 不遵守服务器推送的路线
  • 添加到 VPN 服务器的路由
  • 将路由的度量设置为低值(又称高优先级),以便如果您想到达 VPN 服务器,可以通过默认网关使用此路由。

是在您的默认、未更改的 OpenVPN 客户端设置中显示为默认网关的地址,其度量标准第二低,例如 10.8.0.1。

附加航线

尽管不知道 VPN 在什么情况下对您有用,您当然可以向想要通过 VPN 访问的主机或网络添加更多路由。

route <remote.host.ip.address> vpn_gateway

方案 2

建立基于策略的路由,换句话说,允许除用于 TS 和 MC 的端口之外的所有内容通过 VPN:请参阅这里:Unix&Linux Stack Exchange 上特定端口的 Iptables 异常

  • 配置 iptables(按照链接的示例,确保将 IP 地址、端口和接口名称更改为您的设置)
  • 将路由更改为策略路由

由于您的 iptables 策略已设置为ACCEPT,因此您不需要示例中的那些行:

# Always accept loopback traffic
/sbin/iptables -A INPUT -i lo -j ACCEPT

# Allow established connections, and those not coming from the outside
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -m state --state NEW -i tun0 -j ACCEPT
/sbin/iptables -A INPUT -m state --state NEW -i eth1 -j ACCEPT

相关内容