我正在使用 FreeBSD 12.1 和 openvpn 运行家庭服务器。 openvpn 严格在服务器上运行 - 我的家庭网络的其余部分是非 openvpn。
我是网络服务器的菜鸟,并且正在通过lighttpd 闲逛以该身份使用服务器。我为端口 8080 设置了网络服务器(我的 ISP 保持 80 关闭),并将我的 DD-WRT 路由器设置为将传入端口 8080 转发到服务器 8080。
我想要的是让我的服务器承担 VPN 服务器和非 VPN 网络服务器的双重职责。
但我想要的目标 - 通过我的路由器的外部 IP(添加“:8080”)访问网络服务器 - 仅当我停止 openvpn 时才有效。如果我使用我的 VPN IP(添加了“:8080”),我可以使用烤箱 vpn 访问网络服务器,但是当服务器或 openvpn 重新启动时,该 IP 总是会发生变化,所以这是不切实际的。
在我的 rc.conf 中我有:
firewall_enable=yes
firewall_nat_enable=yes
gateway_enable=yes
(我不确定是否需要最后两个)
我的 ipfw 规则非常基本。如果 openvpn 停止,我将它们本质上设置为我的 torrent 和 NZB 流量的“终止开关”:
00001 allow ip from any to any via lo0
00010 allow ip from any to any via tun0
00101 allow ip from me to 192.168.1.0/24 uid transmission
00102 allow ip from 192.168.1.0/24 to me uid transmission
00103 deny ip from any to any uid transmission
00104 allow ip from me to 192.168.1.0/24 uid sabnzbd
00105 allow ip from 192.168.1.0/24 to me uid sabnzbd
00106 deny ip from any to any uid sabnzbd
这是我的 ifconfig:
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=81049b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,LRO,VLAN_HWFILTER>
ether xx:xx:xx:xx:xx:xx
inet 192.168.1.250 netmask 0xffffff00 broadcast 192.168.1.255
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
inet 127.0.0.1 netmask 0xff000000
groups: lo
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1500
options=80000<LINKSTATE>
inet6 fe80::xxxx:xxxx:xxxx:xxxx%tun0 prefixlen 64 scopeid 0x3
inet xx.xxx.xx.xx --> xx.xxx.xx.xx netmask 0xffffffe0
groups: tun
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
Opened by PID 4074
有什么办法可以做到这一点吗?或者我会被迫拥有一个单独的网络服务器?
我跟着克劳斯·安徒生的指示一步一步,但最终没有成功:
停止防火墙和 VPN。好的
确保您可以从本地主机的端口 8080 连接到您的网络服务器。成功的
然后从同一子网上的另一台机器。成功的
最后来自互联网。成功的 (通过验证https://validator.w3.org/)
网络服务器如何绑定IP?
我可以通过本地地址(192.168.1.250:8080)在内部访问它,或者通过路由器的公共地址(64.67.136.70:8080)在外部和内部访问它。
下一步是启用防火墙。
我使用原始帖子中的设置启用了防火墙。所有连接仍然正常。
最后启用VPN。
我使用原始防火墙设置启用了它,除了外部公共地址(我仍然可以在内部连接)之外,所有连接都正常。现在我还可以通过我的 VPN 地址 (178.73.218.69:8080) 进行外部连接。
然后我添加了您建议的防火墙规则(“00100允许通过em0从任何到任何8080的tcp”)并重新启动防火墙。连接没有变化。
这是我的 ifconfig,没有任何修改:
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=81049b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,LRO,VLAN_HWFILTER>
ether 34:17:eb:d1:30:df
inet 192.168.1.250 netmask 0xffffff00 broadcast 192.168.1.255
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
inet 127.0.0.1 netmask 0xff000000
groups: lo
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1500
options=80000<LINKSTATE>
inet6 fe80::3617:ebff:fed1:30df%tun0 prefixlen 64 scopeid 0x3
inet 178.73.218.69 --> 178.73.218.65 netmask 0xffffffe0
groups: tun
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
Opened by PID 4056
这是使用 VPN 和最新防火墙的“netstat -4rn”的输出:
Destination Gateway Flags Netif Expire
0.0.0.0/1 178.73.218.65 UGS tun0
default 192.168.1.1 UGS em0
127.0.0.1 link#2 UH lo0
128.0.0.0/1 178.73.218.65 UGS tun0
178.73.195.104/32 192.168.1.1 UGS em0
178.73.218.64/27 178.73.218.65 UGS tun0
178.73.218.65 link#3 UH tun0
178.73.218.69 link#3 UHS lo0
192.168.1.0/24 link#1 U em0
192.168.1.250 link#1 UHS lo0
任何进一步的建议将不胜感激。
答案1
是的——它可以工作。然而,您没有提供足够的信息来完全回答,并且您已经编辑了部分内容,这也会有所帮助。
太长了;博士简化并验证
您有一个“复杂”的网络设置。也就是说:您有一个公共网段,em0
但您的 VPN 网段位于tun0
。所有这些都是正常的,但您需要了解如何在这些之间进行路由。也许流量会在 上路由em0
并在 上返回tun0
。然后,来自 Internet 上的 http 客户端的流量可能会传递到您的服务器。但如果服务器通过tun0
http 客户端路由所有返回流量,则永远不会得到任何回复。
要检查这一点,您需要查看并了解您的路由表。查看netstat -4rn
。
但即使从您提供的部分信息来看,我猜您应该查看 ipfw 设置。您显示的规则集可归结为:
Rule 1: Allow everything on lo0
Rule 10: Allow everything on tun0
Rule 101-103: Transmission related
Rule 104-106: sabnzbd related
那么我的问题是:如果您的 DD-WRT 路由将数据包从端口 8080 转发到端口 8080 上的服务器 - 您预计它们会发生什么?
您的防火墙中没有处理这种情况的规则。然后我希望防火墙丢弃该数据包。我pf
自己使用,所以我不能 100% 确定ipfw
使用情况,但它会是这样的:
00100 allow tcp from any to any 8080 in via em0
如果这有效,您可能会减少any to any
到,any to me
并且您可能会选择基于uid
此进行操作。
但是你说当 openvpn 没有运行时它可以工作。这让我预计您的防火墙配置错误并允许所有流量,因为您没有单独的规则来允许端口 8080 的流量。
但是,是的——这样的设置是可以工作的。然而,还有很多活动部件。我会像这样调试它。
停止防火墙和 VPN。确保您可以从端口 8080 上的本地主机连接到您的网络服务器。然后从同一子网上的另一台计算机连接到您的网络服务器。最后来自互联网。这是确保网络服务器已配置并正常工作的第一步。您已经通过 VPN 进行了测试 - 因此配置很可能有效。但是网络服务器如何绑定IP呢?带“*”、“localhost”、本地地址或公共地址。
下一步是启用防火墙。启用防火墙后,您可以检查您的规则是否按预期工作。我认为你的案例的问题就出在这里。
最后启用VPN。这可能会带来有趣的路由问题。如果网络服务器无法访问,我们需要检查路由。这就是我们开始关注的地方
netstart -4rn
。
因此,使用尽可能少的移动部件来充分测试每个步骤,然后一次推进一个步骤。