我有一个开发服务器,只能从 127.0.0.1:8000 访问,不能从 192.168.1.x:8000 访问。作为一个快速的黑客,有没有办法设置一些东西来监听另一个端口(比如 8001),这样我就可以从本地网络连接 192.168.1.x:8001 并且它会在客户端和 127.0 之间建立流量隧道.0.1:8000?
我有一个虚拟专用服务器,我想在我的服务器连接到 VPN 服务时运行网络服务器
当与我的提供商的 VPN 连接未启动时,我可以使用此服务器、ssh、scp、http 等做任何我想做的事情。
一旦 openvpn 运行并连接到提供商的 VPN 服务,服务器就无法通过任何方式访问,当然这是有充分理由的
图片是这样的:
My VPS ------------
+----------------+ / \
| | / Internet / 101.11.12.13
| 50.1.2.3|-----------------\ cloud /----<--- me@myhome
| | / \
| 10.80.70.60| / \
+----------------+ \ \
: \_____________/
: :
: :
: :
: :
+------------------+ :
| 10.80.70.61 | :
| \ | :
| \ | :
| 175.41.42.43:1197|..............:
| 175.41.42.43:yy|
| ..... |
| 175.41.42.43:xx|
+------------------+
Legend
------ Line No VPN …Run Code Online (Sandbox Code Playgroud) 我在运行 ifconfig 时注意到有一个名为 tun0 的网络接口,它有一个 ipv4 地址。一些研究表明它是一个隧道设备,但我真的不知道它是如何使用的,使用它的目的是什么,以及为什么它有一个 IP 地址。
我确实启用了 iptables,如果有帮助的话,iptables 和 tun 之间似乎有一些联系。
有些网站/服务我只能从我的服务器所在的子网访问(想想典型的 Intranet 场景)。有没有办法透明地路由通过 SSH 隧道到达这些地址的流量?
考虑以下设置:
我的笔记本电脑已连接到家庭网络。它不能直接访问 ips X 和 Y 上的服务。我有一个到服务器的 SSH 隧道,该服务器位于可以实际访问这些服务的子网上。
我能否以某种方式自动将所有流量封装到 X 和 Y 的子网以通过此隧道,而不必运行整个 VPN 解决方案来通过服务器发送我的所有流量?换句话说:进入任何其他子网的所有流量仍应直接来自笔记本电脑,而不通过服务器(使用隧道)。
我已经做了一些搜索,或多或少地了解tun0界面的作用。我从各种来源得到以下信息,
操作系统通过 tun/tap 设备发送的数据包被传送到用户空间程序,该程序将自身附加到设备上。用户空间程序也可以将数据包传递到 tun/tap 设备。在这种情况下,tun/tap 设备将这些数据包传送(或“注入”)到操作系统网络堆栈,从而模拟它们从外部源的接收。tun/tap 接口是纯软件接口,这意味着它们仅存在于内核中,并且与常规网络接口不同,它们没有物理硬件组件(因此没有物理线连接到它们)。
您可以将 tun/tap 接口视为常规网络接口,当内核决定“在线”发送数据的时刻到来时,它会将数据发送到连接到该接口的某个用户空间程序。
现在,如果我比较eth0和 的输出tun0,我会看到类似的内容。
ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:14:22:50:78:71
inet addr:172.16.210.32 Bcast:172.16.255.255 Mask:255.255.0.0
...
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
<snipped>
Run Code Online (Sandbox Code Playgroud)
ifconfig tun0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.1 P-t-P:10.8.0.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
Run Code Online (Sandbox Code Playgroud)
现在,如果我们尝试比较两者,我们会发现这些差异,
eth0确实有一个 MAC 地址,可以理解tun0没有。
eth0工作在广播模式,tun0工作在点对点模式。
我有以下几点我不明白。
地址P-t-P:10.8.0.2在这种情况下的作用是什么?
为什么tun0设置的子网掩码为255.255.255.255?
我使用以下指南将我的树莓派设置为接入点:
我转发wlan0到eth0和内廷我所有的流量。效果很好!
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
现在我想设置相同的规则,除了使用接口tun0-00并通过我的 vpn 隧道转发我的所有流量。我确实想发送所有内容,不希望任何内容泄漏到主机网络中。想想它是这样的:
sudo iptables -t nat -A POSTROUTING -o tun0-00 -j MASQUERADE
sudo iptables -A FORWARD -i tun0-00 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A …Run Code Online (Sandbox Code Playgroud) 我最近发现了 Linux TUN/TAP 接口的存在,并且仍在尝试理解它们。我想我得到了基本概念 - 创建了模拟网络接口的伪设备,而不是将数据传递给硬件,而是传递给用户空间程序。
您将如何指导不相关的程序使用此隧道?
例如,在创建隧道之前,我的系统仅包含 eth0 和 lo、普通以太网接口(连接到我的本地网络)和环回接口。在程序创建和配置隧道后,我有一个新的接口 gr0,我提供了一个位于本地网络上但未使用的 IP 地址(因此我们都在同一个子网上)。我如何让一个不相关的程序利用这个“隧道”?假设我有一个简单的 Python 消息传递使用 TCP 连接的客户端/服务器应用程序,我该如何配置它以使用隧道?
如果我遗漏了一些基本的东西,我深表歉意,但像往常一样,我设法让自己在事情的计划中感到困惑。同样,我想要的只是让一个简单的 TCP 程序利用这个隧道。
谢谢!
最近我在 QNX 文档中发现它允许通过使用串行设备 ( dev/serX)在不同物理机器上的进程之间设置基于消息的 IPC ,这让我想知道:
是否可以在 Linux 中为 TCP/UDP 隧道创建系统范围的特殊设备?像ncstdin/stdout 这样的东西在 /dev/something 下公开公开。
最后,我希望能够在一台机器上向此类文件写入一些内容并在另一端接收它,例如:
#machine1:
echo "Hello" > /dev/somedev
#machine2:
cat < /dev/somedev
Run Code Online (Sandbox Code Playgroud)
我看了一下ncman,但没有找到任何选项来指定 stdio 以外的 io 源/目标。
我有一个关于 SSH/端口转发的问题。我还没有在任何地方找到解决方案,也不知道有没有。
我在家里的 NAT 盒后面有一台服务器。我有从我的 NAT 盒到我的服务器的端口转发,用于端口 22 上的 SSH。因此,我my_nat_public_ip:22在旅途中连接到它,它就像一个魅力。
现在我知道即使没有为它配置我的 NAT 盒,我也可以访问我服务器的任何端口。事实上,我可以像这样进行动态端口转发:
ssh -D 1080 user@my_nat_public_ip
Run Code Online (Sandbox Code Playgroud)
然后通过设置我的浏览器连接到我服务器的端口 any_port 或者使用 localhost:1080 作为 SOCKS 代理,并指向my_local_server_ip:any_port.
我想做什么,将是一个命令
ssh -D --local_alias=local_alias user@my_nat_public_ip
Run Code Online (Sandbox Code Playgroud)
如果我访问 local_alias:any_port 它会转发到 my_server:any_port
那可能吗?是否有任何 SSH 选项可以执行此操作?它非常简单,并且可以在不同的服务器上进行多个动态端口转发。
我有一个服务器,它只能通过端口 22 访问外部世界(用于从服务器到其他计算机的 ssh 使用)。
我想通过apt-get在这台服务器上安装一些软件包。
我可以通过 ssh-tunnel 连接到我的超级机器,它在所有端口上都可以访问互联网吗?
如果是这样,如何?因为如果我通过 ssh 启动到我的超级机器的隧道,超级机器的 sshd 在端口 22 上等待。我假设我不能将这个相同的端口 22 重用于隧道,可以吗?
还有其他解决方案吗?