我在连接到 LAN 中其他实例的一台 aws 服务器上实现了软以太网 vpn 服务器。我可以毫无问题地通过 ssh 进入服务器。我遵循ssh [email protected]
本指南
我的目标是允许我使用 vpn 通过我的笔记本电脑或通过我的笔记本电脑访问 LAN 上的远程 aws 服务器。ssh 现在可以正常工作,但我不知道如何获取网页。我想要通过 vpn 获取网页的原因是该网站是一个管理后端,我想限制来自 vpn IP 地址的用户对其进行访问。ssh [email protected]
http://hostname.domainname.com
我添加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
配置文件
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
网络状态监测
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
答案1
好的,接下来https://superuser.com/questions/923747/vpn-ip-forwarding-and-nat/925570#925570我有一个可能非常愚蠢的问题要问,但是如果你只需要访问特定端口,例如 http/https,你尝试过 SSH 隧道吗?这比设置 VPN 容易得多。最终,你从一台机器 ssh 到另一台机器,然后让目标机器建立到某台机器的向前连接,并将该连接转发回你的本地机器。
因此,假设您可以访问机器 AAAA 的公共(DMZ)部分,而该机器又可以访问私有机器 BBBB,并且您想要连接到 HTTPS 服务(端口 443),并假设您的桌面已经在 443 上运行服务,因此您将让服务在 4443 上进行本地监听。
ssh -L4443:B.B.B.B:443 [email protected]
然后登录并运行本地浏览器并转到https://本地主机:4443或者如果你愿意,可以在 hosts 文件中添加一个条目,将 127.0.0.1 发送到 expected.vhost.name,然后转到https://intended.vhost.name:4443/
如果您真的需要 vpn,那么...
您能从笔记本电脑 ping 隧道本地和对端的 IP 地址吗?您能 ping 对端站点网络上的另一台机器吗?如果不能,请尝试跟踪路由,看看是否能从隧道的本地和远程站点收到回显(如果没有,则说明您的路由错误)。
各种网络地址是什么?您可以尝试告诉路由,您希望它在哪个设备上发送流量,否则它必须能够推断。
我正在重读这篇文章,并想添加一些注释,以便让任何试图遵循我的建议的人更容易理解:-
为了能够访问https://intended.vhost.name:4443/并拥有该隧道,您需要在 hosts 文件中添加一个条目。在 Linux 上,该条目是 /etc/hosts;在 Windows 上,该条目是 c:/windows/system32/drivers/etc/hosts。无论哪种方式,您都需要管理员权限才能保存文件(Linux 上为 sudo,Windows 上以管理员身份打开记事本)。然后添加以下行:-
127.0.0.1 intended.vhost.name
我提到的另一件事是在机器上设置一个监听隧道,它可以穿透防火墙。如前所述,运行 ssh -L4443:BBBB:443[电子邮件保护]将在机器 AAAA 上打开一个 ssh 终端,同时将流量从本地(-L)端口 127.0.0.1:4443 隧道传输到 BBBB:443(隐含 127.0.0.1)。假设您的本地机器是 CCCC,并且您想在该 IP 上打开端口 4443,以便其他机器可以访问,您可以执行以下操作:-
ssh -LC.C.C.C:4443:B.B.B.B:443 [email protected]
这里值得注意的是,如果添加 -T 参数,则会改变 ssh 的行为,打开 ssl 连接,然后打开隧道,而不是在其中启动终端。
我以前做过这样的事情,我在本地机器上设置一个用户(假设为 tunneluser),并在 ~tunneluser/.ssh 中为他创建一组 ssh 密钥,然后确保文件 ~tunneluser/.ssh/id_rsa.pub 列在远程机器 ~adminuser/.ssh/authorized_keys 中,这样 ssh 连接就会启动,而无需输入密码。作为一项安全功能,您可以远程设置 tunneluser,使用 /bin/false 作为其 shell(在 /etc/passwd 中),如果您错过了 -T 参数,连接就会失败。
实现该功能的一个简单方法是将其包含在 /etc/init.d 中的脚本中,该脚本在联网后运行(通常在 rc3.d 中)。不过我建议使用以下安全层(避免以 root 身份运行它):
sudo -u tunneluser "ssh -T -i/home/tunneluser/.ssh/id_rsa.pub -LC.C.C.C:4443:B.B.B.B:443 [email protected]"
但请注意,如果您想要监听的 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 -T -RB.B.B.B:4443:C.C.C.C:443 [email protected]
答案2
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 仅绑定到一个特定地址。
这两个原因绝不是可能的解释的完整列表,而只是根据您问题中的信息得出的最有可能的解释。