尝试使用softether vpn客户端和iptables nat ip_forwarding连接到远程局域网中的服务器

我已经在连接到局域网中的其他实例的aws服务器上实施了软件VPN服务器。 我可以用ssh [email protected] ssh进入服务器,没有问题。 我遵循这个指南

我的目标是允许我使用vpn从我的笔记本电脑访问LAN上的远程aws服务器,使用ssh [email protected]http://hostname.domainname.com 。 SSH现在正在工作,但我不知道如何获得一个网页。 我想通过VPN的网页的原因是,该网站是一个pipe理后端,我想限制访问来自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 

netstat -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服务器上:

DhcpTable

 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隧道? 这比build立VPN要容易得多。 最终,你从一台​​机器到另一台机器,然后让目标机器build立一个到某个东西的连接,然后把这个连接转发回你的本地机器。

所以说你可以访问一个AAAA机器的公共(DMZ)部分,它可以访问一个私人机器BBBB,并且你想要连接到一个HTTPS服务(端口443),并假设你的桌面已经有一个服务运行在443 ,所以你将有服务在本地4443听。

  ssh -L4443:BBBB:443 adminuser@AAAA 

然后login,运行一个本地浏览器并转到https:// localhost:4443,或者如果你喜欢,添加一个条目到你的hosts文件,发送127.0.0.1到intended.vhost.name,然后转到https:// intended.vhost.name:4443/

如果你真的需要一个VPN,然后…

你能ping你的笔记本电脑隧道的本地和对面的IP地址? 你可以ping对面的网站上的另一台机器? 如果你不能尝试追踪它,看看你是否从隧道的本地和远程站点得到一个回声(如果没有,你的路由是错误的)。

什么是各种networking地址? 您可能会尝试告诉路由,您期望它发送stream量的设备,否则必须能够推断。

我正在重读这本书,并认为我会添加一些笔记,以便任何人试图按照我的build议去做:

为了能够访问https://intended.vhost.name:4443/并拥有该隧道,需要在主机文件中添加一个条目。 在Linux上,Windows上的/ etc / hosts是C:/ windows / system32 / drivers / etc / hosts无论哪种方式,你需要pipe理员权限来保存文件(sudo for linux,以pipe理员身份在Windows上打开记事本)。 然后添加以下行:

 127.0.0.1 intended.vhost.name 

我提到的另一件事是在一台机器上设置一个监听通道,它可以在防火墙上打出一个洞。 正如前面讨论的那样,运行ssh -L4443:BBBB:443 adminuser @ AAAA将在AAAA机器上打开一个sshterminal,同时这样做会将本地(-L)端口127.0.0.1:4443的stream量隧道到BBBB:443隐含127.0.0.1)。 假设您的本地计算机是CCCC,并且您希望在该IP上打开端口4443,对于其他机器来说,您可以这样做: –

 ssh -LC.CCC:4443:BBBB:443 adminuser@AAAA 

这里值得注意的是,如果你添加一个-T参数,你改变了ssh的行为,打开ssl连接,然后隧道,而不是启动它的terminal。

当我这样做之前,我在本地机器上设置一个用户(可以说tunneluser)并在〜tunneluser / .ssh中为他创build一组ssh密钥,然后确保文件〜tunneluser / .ssh / id_rsa.pub是列在远程机器〜adminuser / .ssh / authorized_keys中,那么ssh连接将启动,而不会提示input密码。 作为安全function,您可以远程安装tunneluser,并将/ bin / false作为其shell(位于/ etc / passwd中),那么如果您错过了-T参数,则连接将失败。

一个简单的实现方法是将其包含在/etc/init.d中的脚本中,这个脚本在联网之后运行(在rc3.d中使用)。 我会build议一个安全层(避免以root身份运行)

 sudo -u tunneluser "ssh -T -i/home/tunneluser/.ssh/id_rsa.pub -LC.CCC:4443:BBBB:443 tunneluser@AAAA" 

但是请注意,如果您想要侦听的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.BBB:4443:CCCC:443 adminuser@AAAA 

ssh和http所需的路由没有区别。 两者都通过TCP运行,并且没有底层IPstream量的技巧。

根据你的问题,两个使用相同的主机名,但是你没有提到这个主机名是只parsing一个还是多个IP地址。 使用telnet命令,您可以validation是否可以在服务器上的端口22和端口80上build立连接。 它也会告诉你一路上连接的IP地址。

从这个问题我可以看到,你正在运行你的ssh和http服务器在你的VPN服务器上的主机名。 这可能是一个问题。 真正的问题不在于它们使用相同的主机名,而在于它们使用相同的IP地址。 即使你使用不同的主机名指向相同的IP地址,它仍然可能是一个问题,但不同的主机名会掩盖问题的根源。

连接到与VPN服务器相同的IP上的服务可能是一个问题,原因是与路由有关。 问题是,如果一个路由表入口指向通过VPN的stream量也覆盖了VPN服务器的IP地址,那么到VPN服务器的数据包不会通过networking发送,而是发送到VPN接口。 这将引入一个路由循环,每当一个数据包绕过循环时,它将被再次encryption,并且变大一点,但是它不会靠近目的地。

一些VPN解决scheme用来避免这种情况的一个解决scheme是在进行任何其他更改之前创build仅覆盖VPN服务器的IP的路由表条目。 通往VPN服务器的stream量永远不会通过VPN。 但是到同一个IP上托pipe的任何其他服务的stream量也将永远不会通过VPN。

最简单的解决scheme是使用两个不同的IP地址访问同一个盒子上的VPN和其他服务。 通常一个VPN服务器将有足够的IP地址分配给它,还有另一个IP地址,可以用于这个目的。

那么为什么它会为ssh而不是http? 您的问题中的信息指向一个可能的原因。

你提到你想限制http服务只能从VPN IP地址连接的用户访问。 如果您已经有了这些filter,那可能是原因。 连接不会通过VPN连接,从而被filter阻塞。 使用ssh而不使用http的原因可能是sshd被configuration为允许来自任何IP地址而不仅仅是VPN范围的连接。

另一个可能的解释是,ssh和http服务没有绑定到相同的IP地址。 也许ssh被绑定到任何地址,http绑定到一个特定的地址。

这两个原因绝不是完整的可能的解释清单,而只是那些最有可能给出你的问题的信息。