小米路由器IPV6相关设置


获取ipv6的地理地址

http://ip.zxinc.org/api.php?type=json&ip=2408:872b:800🅰:1:10

curl 'http://ip.zxinc.org/api.php?type=json&ip=2408:872b:800:a::1:10'

光猫设置桥接到小米路由器

  • 参考资料
  1. 破解联通RG200O V1A3光猫桥接模式
  2. 北京联通上海贝尔RG200O光猫研究

小米路由器开启ssh

小米路由器IPV6拨号设置

  • 转到常用设置-上网设置
    设置截图
  • 设置IPV6拨号
    设置截图
  • 设置开启IPV6 native
    设置截图
  • 设置IPV6拨号成功截图
    设置截图

防火墙设置

小米路由器

  • 进入小米路由器ssh,命令设置
    # 创建一个IPV6链,用于放行需要的服务
    ip6tables -N IPV6
    # 插入IPV6链到转发链第一行
    ip6tables -I FORWARD -j IPV6
    # 放行你的IPV6 youripv6替换为你自己的地址,例如树莓派
    ip6tables -A IPV6 -d <youripv6> -j ACCEPT
    # 查看IPV6链
    ip6tables -L IPV6

终端设备配置

  • 为了安全起见,可以默认设置终端只出站不入站
  • shell相关命令
    # 设置链默认策略
    sudo ip6tables -P INPUT DROP
    sudo ip6tables -P FORWARD DROP
    # 允许ICMP
    sudo ip6tables -A INPUT -p ipv6-icmp -j ACCEPT
    # 设置不允许进站创建连接
    sudo ip6tables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
  • 如果需要放行入站连接,可以用下面的命令
  • 例如:允许TCP 8000 端口
    sudo ip6tables -I INPUT -p tcp -m tcp --dport 8000 -j ACCEPT

其他资料

通过python自动设置小米路由器防火墙

  • 参考资料
    使用 Python ssh 远程登陆服务器的最佳方案
  • 代码描述
    运行脚本,自动将/var/lib/caddy/ipv6.txt文件中的ipv6地址添加到filter表IPV6链
    需要将xiaomi_route_ip替换为自己的小米路由器IP
    需要将xiaomi_route_passwd替换为自己的小米路由器ssh密码
  • 代码源码
    #!/usr/bin/python3
    import paramiko
    import time
    import sys
    
    def change_ipv6(ipv6):
        ipv6 = ipv6.strip()
        trans = paramiko.Transport(("xiaomi_route_ip", 22))
        trans.connect(username="root", password="xiaomi_route_passwd")
        ssh = paramiko.SSHClient()
        ssh._transport = trans
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command(
            "ip6tables -nL IPV6 | grep %s" % ipv6)
        lines = str(ssh_stdout.read(), encoding='utf-8', errors='ignore').strip()
        if '' == lines:
            print('not found %s' % ipv6)
            ssh.exec_command("ip6tables -F IPV6")
            ssh.exec_command("ip6tables -A IPV6 -d %s -j ACCEPT" % ipv6)
            ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command(
            "ip6tables -nL IPV6")
            lines = str(ssh_stdout.read(), encoding='utf-8', errors='ignore').strip()
        print(lines)
        time.sleep(1)
        trans.close()
        ssh.close()
    
    if __name__ == "__main__":
        if len(sys.argv) > 1:
            change_ipv6(sys.argv[1])
        else:
            ipv6 = ''
            with open('/var/lib/caddy/ipv6.txt') as f:
                ipv6 = f.read()
            change_ipv6(ipv6)

文章作者: Mr.Pan
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Mr.Pan !
  目录