V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
webjin1
V2EX  ›  Linux

iptables 内网转发求请教?

  •  
  •   webjin1 · 2016-11-09 03:09:43 +08:00 · 3492 次点击
    这是一个创建于 2723 天前的主题,其中的信息可能已经有所发展或是发生改变。

    服务器 A 网卡配置 2 个 IP 地址
    公网 IP:1.1.1.1
    私网 IP:10.0.0.1
    服务器 A 本身的 ssh 服务监听端口是 tcp12233 端口

    服务器 B 网卡配置了 1 个私网地址
    私网 IP:10.0.0.2
    开放了 ssh默认监听22

    从服务器 A 上面 直接 ping 或者 ssh 10.0.0.2 是可以通的
    1,我现在想从外面通过 ssh 1.1.1.1 tcp22 端口 登录到 服务器 B.
    2,另外 cacti 监控服务器在其他机房 想监控 服务器 B 通过snmp协议获取服务器 B 的数据

    网上找了很多知识实现不了,但是用rinetd可以很快速的实现第1条.但是它无法转发udp.
    另外我想知道iptables实现tcp和udp的内网映射转发的实现方法,谢谢
    16 条回复    2016-11-09 11:51:51 +08:00
    johnnie502
        1
    johnnie502  
       2016-11-09 07:08:56 +08:00
    不是一条命令的事么,不需要 iptables

    echo 1 > /proc/sys/net/ipv4/ip_forward
    hanxiV2EX
        2
    hanxiV2EX  
       2016-11-09 08:45:12 +08:00 via iPhone   ❤️ 1
    @johnnie502 需要 iptables 配置端口的。
    socat 应该更简单,只需要一行命令。 iptables 需要配两行代码。
    hanxiV2EX
        3
    hanxiV2EX  
       2016-11-09 08:59:43 +08:00
    可以参考这个教程。我的配置和这个差不多,你按这个配完,然后保存 iptables 就可以查看是怎么配的了。

    http://coolnull.com/3322.html
    FifiLyu
        4
    FifiLyu  
       2016-11-09 09:03:01 +08:00
    echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
    sysctl -p
    FifiLyu
        5
    FifiLyu  
       2016-11-09 09:03:53 +08:00   ❤️ 2
    @FifiLyu

    iptables -t nat -A PREROUTING -d 1.1.1.1 -p tcp -m tcp --dport 22 -j DNAT --to-destination 10.0.0.2:22
    iptables -t nat -A POSTROUTING -d 10.0.0.2 -p tcp -m tcp --dport 22 -j MASQUERADE
    service iptables save

    这个是转发 SSH 端口。至于 SNMP 你找到默认端口,设置转发即可。
    hanxiV2EX
        6
    hanxiV2EX  
       2016-11-09 09:22:55 +08:00
    @FifiLyu

    第二行这样配有啥区别不?我不知道这些参数的意思。

    iptables -t nat -A POSTROUTING -d 10.0.0.2 -p tcp -m tcp --dport 22 -j SNAT --to-source 1.1.1.1
    webjin1
        7
    webjin1  
    OP
       2016-11-09 09:28:43 +08:00 via Android
    @johnnie502 开启了
    hanxiV2EX
        8
    hanxiV2EX  
       2016-11-09 09:30:11 +08:00
    @FifiLyu
    查到区别了, MASQUERADE 不适合动态 IP 。如果 1.1.1.1 是动态 IP ,则应该这样配:

    iptables -t nat -A PREROUTING -p tcp -m tcp --dport 22 -j DNAT --to-destination 10.0.0.2:22
    iptables -t nat -A POSTROUTING -d 10.0.0.2 -p tcp -m tcp --dport 22 -j MASQUERADE
    FifiLyu
        9
    FifiLyu  
       2016-11-09 09:36:26 +08:00
    @hanxiV2EX

    这个地方, MASQUERADE 和 SNAT 效果基本相同。它们的作用:所有从本地网络出去的包的源地址改为 Internet 连接的地址。如果不作 SNAT 或 MASQUERADE ,返回给客户端的数据包不知道怎么发出去。

    区别:
    SNAT 必须指定 source IP 地址
    MASQUERADE 并需要指定 source IP 地址
    FifiLyu
        10
    FifiLyu  
       2016-11-09 09:37:22 +08:00   ❤️ 1
    @hanxiV2EX

    请原谅我的错别字。 233

    MASQUERADE 不需要指定 source IP 地址
    FifiLyu
        11
    FifiLyu  
       2016-11-09 09:39:40 +08:00
    @hanxiV2EX 动态 IP 的情况必须用 MASQUERADE
    webjin1
        12
    webjin1  
    OP
       2016-11-09 10:33:09 +08:00
    @hanxiV2EX 静态 IP
    webjin1
        13
    webjin1  
    OP
       2016-11-09 10:43:34 +08:00
    @hanxiV2EX socat 的可以,但是 socat 的 fork 出来的子进程几个小时上上几千,感觉他不会释放出来.
    webjin1
        14
    webjin1  
    OP
       2016-11-09 10:50:43 +08:00
    @FifiLyu 不行.昨天也找了这个教程.怎么搞也弄不出来.后来看了 iptables 追踪表.
    ipv4 2 tcp 6 117 SYN_SENT src=183.60.xxx.xx dst=1.1.1.1 sport=50796 dport=22 [UNREPLIED] src=10.10.0.1 dst=1.1.1.1 sport=22 dport=50796 mark=0 secmark=0 use=3
    webjin1
        15
    webjin1  
    OP
       2016-11-09 10:51:42 +08:00
    @FifiLyu 上面打错了. ipv4 2 tcp 6 117 SYN_SENT src=183.60.xxx.xx dst=1.1.1.1 sport=50796 dport=22 [UNREPLIED] src=10.0.0.2 dst=1.1.1.1 sport=22 dport=50796 mark=0 secmark=0 use=3
    FifiLyu
        16
    FifiLyu  
       2016-11-09 11:51:51 +08:00
    @webjin1
    我昨天才在阿里云作了一台转发。规则是没问题的,应该是其它地方有问题导致。

    执行命令 iptables -vnL 和 iptables -t nat -vnL 把结果贴出来
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3920 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 05:10 · PVG 13:10 · LAX 22:10 · JFK 01:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.