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

iptables 如何实现转发 CNAME 的端口?

  •  
  •   babytomas ·
    babytomas · 2015-09-02 17:27:46 +08:00 · 7021 次点击
    这是一个创建于 3364 天前的主题,其中的信息可能已经有所发展或是发生改变。
    说一下背景:

    我要实现监控录像端口转发到公网,并且在任何地方都可以用手机 gDMSS 客户端看到。

    公司只可以用铁通的宽带,铁通的宽带端口仅对网内的用户开放。
    (例如说我在另外一个地方,我也是铁通的,我就可以访问你的 80 、 443 等各种端口)

    IP : 221.172.12.240 ,这是我今天拨号得到的地址

    阿里云是多线的,因此可以访问铁通的端口。所以我用它来转发:

    iptables -t nat -A PREROUTING -p tcp -m tcp --dport 37777 -j DNAT --to-destination 221.172.12.240:37777

    转发了之后,由于阿里云的端口是全网都可以访问的,这样我就实现了我最初的目的。

    然而,我这里的 AC 使用的是 Ripple OS ,每天有计划重启。

    每次重启我的公网 IP 就会变动,但是我设置了 DDNS ,也就是说、如果可以转发 CNAME 的端口,也就不用我每天修改一下 iptables 规则了。

    -------------------------------------------------------------------

    如上就是背景,我想知道如何使用 iptables 转发我使用了 DDNS 的 CNAME 。

    或者是说有什么其他的端口转发,可以转发 CNAME 的端口?
    第 1 条附言  ·  2015-09-03 19:38:35 +08:00

    最后我的解决办法:

    !/bin/sh

    service iptables restart
    ddnsip=ping -c1 xxx.ddns.com|awk -F'[(|)]' 'NR==1{print $2}'
    iptables -t nat -A PREROUTING -p tcp -m tcp --dport 37777 -j DNAT --to-destination $ddnsip:37777

    最后没办法还是写了一个 shell 来更新 iptables 中的 IP 地址。方法如上,加入 cronjobs 即可

    12 条回复    2019-09-15 18:45:04 +08:00
    babytomas
        1
    babytomas  
    OP
       2015-09-02 17:28:34 +08:00
    现在就是每天 ping 一下我的 DDNS 的 CNAME 地址,然后进 VPS 修改 iptables 规则。。。然后用手机客户端看监控 。。。。。。。。。。
    xmoon
        2
    xmoon  
       2015-09-02 17:45:49 +08:00
    所以你要写个 shell 脚本丢 cron 里
    zixianlei
        3
    zixianlei  
       2015-09-02 19:05:30 +08:00
    1L 不就是解决方法嘛
    paw
        4
    paw  
       2015-09-02 19:30:57 +08:00
    AC 重启后自动连上阿里云根据自身 IP 去改下 iptables 。。。。。。。
    freezex
        5
    freezex  
       2015-09-02 19:47:48 +08:00 via Android
    我感觉只用 rinetd 就够了
    freezex
        6
    freezex  
       2015-09-02 19:56:47 +08:00 via Android
    用 rinetd 这样配置就能解决你的问题

    0.0.0.0 37777 your.ddns.com 37777
    allow *.*.*.*
    likuku
        7
    likuku  
       2015-09-02 20:04:33 +08:00
    iptables 不支持域名,或者, LZ 你可以用 openvpn 将阿里的服务器和你自己铁通网络内的某台 server 连起来。

    比如, openvpn server 放阿里服务器,铁通内某服务器 /router for 监控设备 openvpn client 去保持与阿里服务器连线
    salmon5
        8
    salmon5  
       2015-09-02 21:00:25 +08:00
    7 楼的方法靠谱,也不需要 DDNS ,动态 IP 的一端装 openvpn client , server 上 iptables 打通到 openvpn client 的内网 IP 。 openvpn 亲自验证这种环境,很稳定,自身有心跳机制,短线重连。
    salmon5
        9
    salmon5  
       2015-09-02 21:05:59 +08:00
    也可以动态 IP 一端,写个 shell , curl ifconfig.co 获取外网 IP ,如果发生变化,远程执行 iptables 命令到阿里云机器更改 IP 。也不需要 DDNS 。
    babytomas
        10
    babytomas  
    OP
       2015-09-03 18:33:28 +08:00
    @xmoon 刚刚自己写了个脚本每天 ping 一下 DDNS 的域名,然后把 iptables 中的 IP 修改过来 。。。
    @freezex 用 rinetd 使用这个规则端口显示是开了,可是手机端也是连不上。不知道是不是无法转发 CNAME 还是说这类协议太奇特 。。
    @salmon5 你这个主意也很好 。。但是远程执行的话好像又有点麻烦了,我现在就直接在腾讯云 ping DDNS 的域名来改 。。。

    目前也就只能这样了,谢谢各位的回复,受益良多。
    xingzhela
        11
    xingzhela  
       2015-10-28 13:09:47 +08:00
    @babytomas 草泥马,把你妈包给我
    shansing
        12
    shansing  
       2019-09-15 18:45:04 +08:00
    挖个坟。我也有类似的需求。目前我用的是 v2 的任意门协议,可以适应域名解析变化。用过 rinetd,似乎只会在启动时解析域名,之后并不会随域名解析变化而更新。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1239 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 17:45 · PVG 01:45 · LAX 09:45 · JFK 12:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.