将本地端口从 Raspbian 路由到另一台机器(端口隧道)
Route local port from Raspbian to another machine (port tunneling)
我想将带有 Raspbian 的 Raspberry 端口 5555 上的传入 tcp 流量路由到同一本地网络中的另一台机器和端口,并使其在重启后保持不变。
上下文
objective 是如果我在本地主机上访问 5555 上的服务,它将加载远程机器上的不同端口。最终目标是将端口 53 (DNS) 转发到另一台机器(非 53 端口),但与此同时,我正在使用 http: https://localhost:5555
进行测试,它应该加载 https://192.168.250.250:9999
where 192.168.250.250是我本地网络中的一台远程机器(所有本地网络均可访问,ping 192.168.250.250
有效)。
我试过的
像这样的网络资源很多。大多数依赖路由器上的 IP 转发,这在我的情况下不起作用,因为我试图重定向本地主机中主机内的端口以直接访问机器。其他的,对于端口隧道,都使用下面的方法:
iptables
sudo iptables -t nat -A PREROUTING -p tcp --sport 5555 -j DNAT --to-destination 192.168.250.250 --dport 9999
这没有用。我尝试了一些变体,包括:
sudo iptables -t nat -A PREROUTING -p tcp --sport 5555 -j DNAT --to-destination 192.168.250.250:9999
这没有用,尽管规则已注册:
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- anywhere anywhere tcp spt:5555 dpt:9999 to:192.168.250.250
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
我还安装了 iptables-persistent
以使其持久化,但它一开始并没有重定向。
我还尝试了该命令的变体,因为我认为我可能将“源”端口误解为目的地:
sudo iptables -t nat -A PREROUTING -p tcp -j DNAT --to-destination 192.168.250.250:9999 --dport 5555
进行任何这些更改后,我总是 运行:
sudo dpkg-reconfigure iptables-persistent
sudo netfilter-persistent save
sudo netfilter-persistent restart
确保规则永久适用。我还尝试 this tutorial 在重新启动时加载配置。尽管如此,再一次,这只是不转发,它的永久方面在现阶段尚不清楚且次要。
socat
socat tcp-listen:5555,reuseaddr,fork tcp:192.168.250.250:9999
这很好用。然而,它并不持久。只要我 cntrl+c 终端,它就会停止重定向。
nc
sudo nc -l -p 5555 -c 'nc 192.168.250.250 9999'
和
sudo nc -l -p 5555 192.168.250.250 9999
都没用。第一个抛出错误(-c 不存在)。后者什么都不做。
up tables 解决方案应该有效。但是,您必须检查您的 ipv4 转发并启用它(大多数 linux 发行版都没有 enabled/allowed),这可能是您的问题。
检查这个
$ cat /proc/sys/net/ipv4/ip_forward
0
0表示不允许ip_forwarding,内核不会执行。
要么
$ echo 1> /proc/sys/net/ipv4/ip_forward
或使用 sysctl
$ sysctl -w net.ipv4.ip_forward = 1
我想将带有 Raspbian 的 Raspberry 端口 5555 上的传入 tcp 流量路由到同一本地网络中的另一台机器和端口,并使其在重启后保持不变。
上下文
objective 是如果我在本地主机上访问 5555 上的服务,它将加载远程机器上的不同端口。最终目标是将端口 53 (DNS) 转发到另一台机器(非 53 端口),但与此同时,我正在使用 http: https://localhost:5555
进行测试,它应该加载 https://192.168.250.250:9999
where 192.168.250.250是我本地网络中的一台远程机器(所有本地网络均可访问,ping 192.168.250.250
有效)。
我试过的
像这样的网络资源很多。大多数依赖路由器上的 IP 转发,这在我的情况下不起作用,因为我试图重定向本地主机中主机内的端口以直接访问机器。其他的,对于端口隧道,都使用下面的方法:
iptables
sudo iptables -t nat -A PREROUTING -p tcp --sport 5555 -j DNAT --to-destination 192.168.250.250 --dport 9999
这没有用。我尝试了一些变体,包括:
sudo iptables -t nat -A PREROUTING -p tcp --sport 5555 -j DNAT --to-destination 192.168.250.250:9999
这没有用,尽管规则已注册:
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- anywhere anywhere tcp spt:5555 dpt:9999 to:192.168.250.250
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
我还安装了 iptables-persistent
以使其持久化,但它一开始并没有重定向。
我还尝试了该命令的变体,因为我认为我可能将“源”端口误解为目的地:
sudo iptables -t nat -A PREROUTING -p tcp -j DNAT --to-destination 192.168.250.250:9999 --dport 5555
进行任何这些更改后,我总是 运行:
sudo dpkg-reconfigure iptables-persistent
sudo netfilter-persistent save
sudo netfilter-persistent restart
确保规则永久适用。我还尝试 this tutorial 在重新启动时加载配置。尽管如此,再一次,这只是不转发,它的永久方面在现阶段尚不清楚且次要。
socat
socat tcp-listen:5555,reuseaddr,fork tcp:192.168.250.250:9999
这很好用。然而,它并不持久。只要我 cntrl+c 终端,它就会停止重定向。
nc
sudo nc -l -p 5555 -c 'nc 192.168.250.250 9999'
和
sudo nc -l -p 5555 192.168.250.250 9999
都没用。第一个抛出错误(-c 不存在)。后者什么都不做。
up tables 解决方案应该有效。但是,您必须检查您的 ipv4 转发并启用它(大多数 linux 发行版都没有 enabled/allowed),这可能是您的问题。
检查这个
$ cat /proc/sys/net/ipv4/ip_forward
0
0表示不允许ip_forwarding,内核不会执行。
要么
$ echo 1> /proc/sys/net/ipv4/ip_forward
或使用 sysctl
$ sysctl -w net.ipv4.ip_forward = 1