我已经在一个连接到 LAN 中其他实例的 aws 服务器上实现了一个 softether vpn 服务器。ssh [email protected]
我可以毫无问题地通过 ssh 进入服务器。我按照本指南
我的目标是允许我使用ssh [email protected]
或http://hostname.domainname.com
从我的笔记本电脑使用 vpn 访问 LAN 上的远程 aws 服务器。ssh 现在正在工作,但我不知道如何获取网页。我想要通过 vpn 访问网页的原因是该网站是一个管理后端,我想限制来自 vpn IP 地址的用户的访问。
我添加net.ipv4.ip_forward = 1
到 sysctl 和
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
route add -net 10.0.0.0/8 gw 10.0.1.10
ifconfig -a
vpn_tun0 Link encap:Ethernet HWaddr 00:ac:a3:58:1f:78
inet addr:10.0.1.11 Bcast:10.0.1.255 Mask:255.255.255.0
inet6 addr: fe80::2ac:a3ff:fe58:1f78/64 Scope:Link
网络统计 -nr
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
10.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 vpn_tun0
10.0.1.0 0.0.0.0 255.255.255.0 U 0 0 0 vpn_tun0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
在 vpnserver 的服务器上:
DHCP表
ID |21
Leased at |2015-06-08 (Mon) 08:49:46
Expires at |2015-06-08 (Mon) 14:23:06
MAC Address |00-AC-A3-58-1F-78
Allocated IP |10.0.1.11
Client Host Name|Inspiron-1564
在我的笔记本电脑上 vpnclient
VPN Client>accountlist
AccountList command - Get List of VPN Connection Settings
Item |Value
----------------------------+----------------------------------------------------
VPN Connection Setting Name |my_connection
Status |Connected
VPN Server Hostname |hostname.domainname.com:5555 (Direct TCP/IP Connection)
Virtual Hub |lan-internal
Virtual Network Adapter Name|tun0
好的,所以从https://superuser.com/questions/923747/vpn-ip-forwarding-and-nat/925570#925570开始,我可能会问一个非常愚蠢的问题,但如果你只需要访问到特定端口,例如 http/https 您是否尝试过 SSH 隧道?这比设置 VPN 容易得多。最终,您从一台机器 ssh 到另一台机器,然后让目标机器与某物建立前向连接,并将该连接转发回您的本地机器。
因此,假设您可以访问机器 AAAA 的公共(DMZ)部分,该机器又可以访问私有机器 BBBB,并且您想要连接到 HTTPS 服务(端口 443),并假设您的桌面已经有一个在 443 上运行的服务,因此您将让服务在 4443 上本地侦听。
然后登录,运行本地浏览器并转到https://localhost:4443或者如果您愿意,可以在您的主机文件中添加一个条目,将 127.0.0.1 发送到预期.vhost.name 然后转到https://预期的.vhost.name:4443/
如果你真的需要一个VPN,那么......
你能从你的笔记本电脑上同时ping通隧道的本地和对端的IP地址吗?您可以在对面站点网络上 ping 另一台机器吗?如果您无法尝试对其进行跟踪路由,请查看是否从隧道的本地和远程站点收到回显(如果没有,则说明您的路由错误)。
各种网络地址是什么?您可以尝试告诉路线,您希望它在哪个设备上发送流量,否则它必须能够推断。
我正在重新阅读这篇文章,并认为我会添加一些注释,这可能会让任何试图遵循我建议的人更容易:-
为了能够访问https://intended.vhost.name:4443/并拥有该隧道,您需要在主机文件中添加一个条目。在 Linux 上,在 Windows 上是 /etc/hosts,它是 c:/windows/system32/drivers/etc/hosts 无论哪种方式,您都需要管理员权限来保存文件(对于 linux,sudo,在 Windows 上以管理员身份打开记事本)。然后添加以下行:-
我提到的另一件事是在机器上设置监听隧道,它可以在防火墙上打一个洞。如前所述,运行 ssh -L4443:BBBB:443 adminuser@AAAA 将在机器 AAAA 上打开一个 ssh 终端,这样做时,会将流量从本地(-L)端口 127.0.0.1:4443 隧道传输到 BBBB:443( 127.0.0.1 是隐含的)。假设您的本地机器是 CCCC,并且您想在该 IP 上打开端口 4443,以便其他机器访问您可以这样做:-
这里值得注意的是,如果添加 -T 参数,则更改 ssh 的行为,打开 ssl 连接,然后是隧道,而不是在其中启动终端。
当我之前完成此操作时,我在本地计算机上设置了一个用户(比如说隧道用户)并在 ~tunneluser/.ssh 中为他创建一组 ssh 密钥,然后确保文件 ~tunneluser/.ssh/id_rsa.pub 是列在远程机器 ~adminuser/.ssh/authorized_keys 中,则 ssh 连接将启动而不提示输入密码。作为一项安全功能,您可以远程设置隧道用户,使用 /bin/false 作为他的 shell(在 /etc/passwd 中),如果您错过 -T 参数,连接将失败。
一种简单的实现方法是将其包含在 /etc/init.d 中的脚本中,该脚本在联网后运行(通常在 rc3.d 中)。我建议使用一层安全性(避免以 root 身份运行)
但请注意,如果您要侦听的 IP(上面列出的 :4443)是“特权端口”(即它在系统服务通常使用的范围内),您需要以 root 身份运行 ssh,以获取允许在那里听。
然后,任何窗口用户只需访问https://CCCC:4443,他们就会看到https://BBBB:443上的站点。
如果 CCCC 的机器没有服务阻塞 :443,请使用它而不是 :4443,并且https://CCCC将等同于https://BBBB
顺便说一句,如果意图相反,假设你在一台可以访问 CCCC 的机器上,你想通过机器 AAAA 在 DMZ 上打一个洞,这样可以访问 BBBB 的用户就可以通过隧道访问 CCCC,而不能要直接访问它,请使用 -R 而不是 -L (并且侦听套接字位于远程,而不是隧道的本地端)。我包括 -T 以显示它是如何使用的。
ssh 和 http 所需的路由没有区别。两者都在 TCP 上运行,并且不使用底层 IP 流量。
根据您的问题,两者都使用相同的主机名,但您没有提到该主机名是解析为一个还是多个 IP 地址。使用该
telnet
命令,您可以验证是否可以与服务器上的端口 22 和端口 80 建立连接。它还会告诉您它连接到的 IP 地址。从问题中,我可以看到您在与 VPN 服务器相同的主机名上运行 ssh 和 http 服务器。那可能是个问题。这里真正的问题不是他们使用相同的主机名,而是他们使用相同的 IP 地址。即使您使用指向相同 IP 地址的不同主机名,它仍然可能是一个问题,但是不同的主机名会掩盖问题的根源。
连接到与 VPN 服务器在同一 IP 上的服务可能会出现问题的原因与路由有关。问题在于,如果通过 VPN 引导流量的路由表条目也包含 VPN 服务器的 IP 地址,那么发送到 VPN 服务器的数据包不会通过网络发送,而是发送到 VPN 接口。这将引入一个路由循环,每次数据包绕过循环时,它都会再次加密一次并变大一点,但它不会离目的地更近。
一些 VPN 解决方案用来避免这种情况的一种解决方案是在进行任何其他更改之前创建一个仅涵盖 VPN 服务器 IP 的路由表条目。这样,到 VPN 服务器的流量将永远不会通过 VPN。但是,托管在同一 IP 上的任何其他服务的流量也永远不会通过 VPN。
最简单的解决方案是使用两个不同的 IP 地址来访问托管在同一个盒子上的 VPN 和其他服务。通常,VPN 服务器将分配给它足够的 IP 地址,从而有另一个 IP 地址可用于此目的。
那么为什么它适用于 ssh 而不是 http?您问题中的信息指出了一个可能的原因。
您提到您希望将 http 服务限制为只能由从 VPN IP 地址连接的用户访问。如果您已经安装了这些过滤器,那可能就是原因。该连接根本没有通过 VPN 连接,因此被过滤器阻止。使用 ssh 而不是 http 时它会起作用的原因可能是 sshd 被配置为允许来自任何 IP 地址的连接,而不仅仅是 VPN 范围。
另一种可能的解释是 ssh 和 http 服务没有绑定到同一个 IP 地址。也许 ssh 绑定到任意地址,而 http 仅绑定到一个特定地址。
这两个原因绝不是可能解释的完整列表,而只是根据您的问题中的信息听起来最有可能的解释。