标签: port-forwarding

如何检查 iptables 端口转发规则

我试图让端口转发在一台机器上工作。我在这里阅读了许多有关该问题的主题,但我无法让它发挥作用。计划是将端口 5000 上 ppp0 上的所有传入流量转发到 eth0 上的设备。以下是我尝试过的规则(从该网站收集):

iptables -t nat -A PREROUTING -p tcp -i ppp0 --dport 5000 -j DNAT --to-destination 192.168.5.242:5000
iptables -A FORWARD -p tcp -d 192.168.5.242 --dport 5000 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -j MASQUERADE -o ppp0
Run Code Online (Sandbox Code Playgroud)

那行不通。接下来的尝试是这样的:

iptables -A PREROUTING -t nat -i ppp0 -p tcp --dport 5000 -j DNAT --to 192.168.5.242:5000
iptables -A INPUT -p tcp -m state --state NEW --dport 5000 -i ppp0 -j ACCEPT
iptables -t nat …
Run Code Online (Sandbox Code Playgroud)

iptables port-forwarding

3
推荐指数
1
解决办法
5万
查看次数

如何将外部 TCP 端口 80 路由到环回 (127.0.0.1) 端口 8080?

我有一个具有真实 IP 的测试 VDS 盒子。如果我在物理接口端口 80 上启动 Web 服务器,则可以通过其 IP 地址(和默认端口 80)从另一台计算机打开它:

python -m SimpleHTTPServer 80
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试将端口 80 从物理接口重新定向eth0到环回 127.0.0.1 端口 8080,我可以从端口 8080 上的另一台计算机连接它,但无法在端口 80 上连接,这只是无休止的“连接”。似乎没有发生重定向:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:8080
python -m SimpleHTTPServer 8080
Run Code Online (Sandbox Code Playgroud)

我做错了什么?:(

PS “127.0.0.1:8080”上的绑定服务器产生相同的结果,但这并不重要,因为在“0.0.0.0:8080”上运行的服务器将接受重定向到“127.0.0.1:8080”的连接。AFAIK。:(

iptables -L结果:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination …
Run Code Online (Sandbox Code Playgroud)

linux firewall iptables port-forwarding

3
推荐指数
1
解决办法
2万
查看次数

3台机器之间的端口转发

我有 3 台机器,它们连接成一条链,A、B、C。

 A-->B-->C
Run Code Online (Sandbox Code Playgroud)

A 是我的机器,B 是服务器,C 是其他机器,上面有一些服务和 Web 服务器。由于一些问题,我需要从A访问C上的Web服务器(端口80),我可以使用ssh从A登录到B,然后从B登录到C,但此时控制台太少了。我需要网络浏览器,并且使用带选项的 ssh-X不起作用(Firefox 启动时 dbus 出现一些问题)。

我使用经典命令在 B 上进行端口转发,为 ssh 转发 22 端口:

ssh -L 2222:localhostB:22 user@ipC
Run Code Online (Sandbox Code Playgroud)

但使用相同的方法转发端口 80 不起作用:

ssh -L 8888:localhostB:80 user@ipC
Run Code Online (Sandbox Code Playgroud)

我知道还有其他一些转发可以使其工作,但我不明白如何以及什么。

我需要这样的东西:

A --> B (frd from B:8888 to C:80) --> C (port 80 web server)
Run Code Online (Sandbox Code Playgroud)

因此,当我输入 ipB:8888 时,我将被转发到 C:80。

任何解释必须做什么的帮助或带有命令的脚本将不胜感激。我从一篇博客中注意到必须完成两次ssh -L转发,但我不明白为什么。

ssh port-forwarding ssh-tunnel

3
推荐指数
1
解决办法
3205
查看次数

SSH RemoteForward 因共享控制套接字而失败

我的 ~/.ssh/config 包含:

ControlMaster auto
ControlPath ~/.ssh/socket-%r@%h:%p

Host hostname.example
    # TextMate rmate port
    RemoteForward :52698 localhost:52698
Run Code Online (Sandbox Code Playgroud)

当我与主机建立初始连接时,它成功创建了位于 的主套接字文件~/.ssh-lachlanhunt@hostname.example:22

但是当我打开一个新终端并尝试建立第二个连接时,我收到此错误:

$ ssh hostname.example
mux_client_forward: forwarding request failed: remote port forwarding failed for listen port 52698
muxclient: master forward request failed
ControlSocket /Users/lachlanhunt/.ssh/socket-lachlanhunt@hostname.example:22 already exists, disabling multiplexing
Warning: remote port forwarding failed for listen port 52698
Run Code Online (Sandbox Code Playgroud)

但是,如果我注释掉RemoteForward配置中的行,它就能够成功地重用连接,从而使其连接速度更快。有什么方法可以配置 ssh 以支持多路复用连接并启用远程端口转发,这样它仅在主连接时尝试转发端口?

我的系统:

  • macOS 塞拉利昂 10.12.6
  • OpenSSH_7.4p1、LibreSSL 2.5.0

ssh port-forwarding

3
推荐指数
1
解决办法
3793
查看次数

使用iptables实现多个端口的端口转发

我的服务在端口 30000-32000 上的 VPS A(1.1.1.1) 上运行。

我想要 VPS B(2.2.2.2) 将它们端口转发到 20000-22000。

(您可以查看下面的演示图链接以了解我想要实现的目标:D)

转发到不同端口

我使用下面的命令来设置 iptables:

iptables -t nat -A PREROUTING -p tcp --dport 20000:22000 -j DNAT --to-destination 1.1.1.1:30000-32000
iptables -t nat -A POSTROUTING -p tcp -d 1.1.1.1 --dport 30000:32000 -j SNAT --to-source 2.2.2.2
20000:22000
iptables -t nat -A PREROUTING -p udp --dport 20000:22000 -j DNAT --to-destination 1.1.1.1:30000-32000
iptables -t nat -A POSTROUTING -p udp -d 1.1.1.1 --dport 30000:32000 -j SNAT --to-source 2.2.2.2
20000:22000
Run Code Online (Sandbox Code Playgroud)

经过一些测试,我发现似乎只有20000端口转发了原服务器的30000端口。但是其他端口都不起作用。

我检查了以下 4 件事: 1. VPS A …

iptables port-forwarding

3
推荐指数
1
解决办法
1万
查看次数

Docker 网络 IPv6 暴露

我正在运行一个小臂板,在我们的本地网络内提供一些服务。当我尝试了解 docker 对 ipv6 的支持时,我对第一次测试的结果感到非常困惑。

我的网络由使用 dhcpv6 的单个路由控制,每个客户端都有 2 个有效的全局 ipv6 地址(还有 1 个本地 ipv4),并受到路由器防火墙的保护(不允许从互联网到客户端的请求)。

Arm 板运行的是 ubuntu 16.04,具有有效的 ipv6 地址并启用了隐私扩展。

所有docker容器都使用默认的桥接网络,没有任何调整。

在docker主机上

netstat -tulpen|grep docker
Run Code Online (Sandbox Code Playgroud)

节目

tcp6       0      0 :::8080                 :::*                    LISTEN      0          22490       1559/docker-proxy
Run Code Online (Sandbox Code Playgroud)

没有一个 ipv4 服务正在侦听。

在这个 docker 容器内,相同的 netstat 请求给出

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      0          23955       8/nginx         
tcp6       0      0 :::80                   :::*                    LISTEN      0          23956       8/nginx  
Run Code Online (Sandbox Code Playgroud)

Nginx 正在侦听 ipv6 和 ipv4 - 端口 80 暴露给端口 8080

docker run (...) -p 8080:80 (...) 
Run Code Online (Sandbox Code Playgroud)

检查桥接网络

docker …
Run Code Online (Sandbox Code Playgroud)

ipv6 port-forwarding netstat docker docker-machine

3
推荐指数
1
解决办法
5082
查看次数

双端口转发 kubernetes + docker

概括:

我有一个运行 kubectl port-forward 的 docker 容器,将作为 k8s 服务运行的 postgres 服务的端口 (5432) 转发到本地端口 (2223)。在 Dockerfile 中,我暴露了相关端口 2223。然后我通过发布该端口来运行容器 ( -p 2223:2223)

现在,当我尝试通过访问 postgres 时psql -h localhost -p 2223,出现以下错误:

psql: server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
Run Code Online (Sandbox Code Playgroud)

但是,当我docker exec -ti对上述容器执行操作并运行上述 psql 命令时,我能够连接到 postgres。

Dockerfile 命令:

EXPOSE 2223
CMD ["bash", "-c", "kubectl -n namespace_test port-forward service/postgres-11-2 2223:5432"]
Run Code Online (Sandbox Code Playgroud)

Docker 运行命令:

docker run -it --name=k8s-conn-12 -p 2223:2223 my_image_name:latest
Run Code Online (Sandbox Code Playgroud)

docker …

port-forwarding psql docker kubernetes kubectl

3
推荐指数
1
解决办法
3847
查看次数

通过带有端口转发的家庭路由器的 SSH

我可以使用它的内部 IP 地址(如 192.168.10.2)从我的家庭网络中通过 SSH 连接到我的 linux 机器。或者从外部,我可以通过我的路由器上的端口转发通过我的外部 IP 地址(如 74.23.43.98)进行连接,我已设置将端口 22 上的传入连接转发到内部地址 192.168.10.2。但是,如果我在家,则无法通过外部 IP 地址进行连接。这仅适用于我的网络外部。这是普遍真实的还是我的特定摩托罗拉路由器的特点?

谢谢

ssh router port-forwarding

2
推荐指数
1
解决办法
8095
查看次数

ssh 端口转发/安全风险

我想从外部机器访问在我的办公室防火墙后面的 Web 服务器上运行的 Web 应用程序。

我们有一个运行 sshd 的堡垒主机,它可以从 Internet 访问。

我想知道这个解决方案是否是一个坏主意:

  • 使用 shell=/bin/false 在堡垒主机上创建一个帐户,没有密码('testuser')
  • 在外部机器上创建一个 ssh RSA 密钥
  • 将公共 RSA 密钥添加到 testuser 的 authorized_keys 文件中
  • 使用以下命令从外部主机 ssh 到堡垒主机:ssh -N 8888:targethost:80
  • 从外部主机运行我的测试
  • 关闭 ssh 隧道

我知道如果我的 RSA 私钥被泄露,那么有人可以通过 ssh 连接到堡垒主机。但是这个解决方案是个坏主意还有其他原因吗?

谢谢你!

security ssh port-forwarding

2
推荐指数
1
解决办法
3567
查看次数

Rsync 的端口转发

我服务器上的每个端口都被阻止,除了端口 222 也是 ssh 连接。这台服务器几乎是一个备份服务器,我的客户端 rsync 到它。

我通过使用 ssh 的端口转发 ( -P 222 -L 873:myserver.com:873) 来做到这一点,但是,我只想使用 rsync 命令来做到这一点。那可能吗?

这是我一直在尝试的:

sudo rsync -avv --progress --inplace --rsh='ssh -p 222 -L 873:myserver.com:873' . rsync://bt-backup@localhost/backup-bt-backup
Run Code Online (Sandbox Code Playgroud)

但它不起作用,因为我尝试登录本地主机,而不是 myserver.com。

正在做:

sudo rsync -avv --progress --inplace --rsh='ssh -p 222 -L 873:myserver.com:873' . rsync://bt-backup@myserver.com/backup-bt-backup
Run Code Online (Sandbox Code Playgroud)

让我通过 ssh 登录,但 rsync 尝试远程主机而不是端口已转发的本地主机

ssh rsync port-forwarding

2
推荐指数
1
解决办法
1万
查看次数