华硕ac68u 畅游 IPV6

ipv6时代

公网IP不再是稀缺资源,IPV6和IPV4最本质上的区别。大量可用的IP地址,抛弃了NAT那一套,全程走通告,不再需要DHCP。(PS:特殊场景仍然有DHCP6用途)

拥抱IPV6

以AC68U机器为例(梅林固件、其它魔改梅林固件同理),其它ASUS系列机器同理。

一、开启路由器V6支持

进入192.168.0.1(你路由器地址),

高级设置栏目/IPV6

QQ20210204-222054@2x.png

然后开启IPV6支持

QQ20210204-222630@2x.png

二、测试IPV6是否工作正常

打开测试IPV6

如图,这样就算成功了

QQ20210204-222926@2x.png

有了IPV6可以做什么?

1.内网存储(私有网盘)

通过使用Cloudnext 等一系列开源私有网盘工具,我们可以搭建自己的内网存储

  1. 远程ssh

  2. 其它WEB服务(注:80、443端口是需要备案才能使用的,最好不要开放这两个端口出去;大部分时候开放了也不能使用)

  3. 其它需要使用公网IP的场景

IPV6与安全

开启了IPV6 给予了我们方便,同时也带来了一些安全隐患。我们需要使用ASUS固件上的防火墙来增加安全防护。

1.开启IPV6防火墙

未正确配置会导致服务不能使用

如图,我们把IPV6防火墙启用

QQ20210204-223714@2x.png

2.防火墙配置

点击左侧高级设置-IPv6 找到 “内部网络 IPv6 地址” 选项,复制右边的制

得到如:

2401:8262:f80:5555::1

我们在这串地址后面加上/64

变成了 2401:8262:f80:5555::1/64

3.开放端口(得到了内网网段地址,我们就可以去开放端口了)

回到高级设置-防火墙,拉到最下面

QQ20210204-223714@2x.png

做完之后,我们点击 “应用本页面设置”,就可以在防火墙开启的情况下,正常访问我们允许的端口号了。

进阶DDNS

ps:虽然我们有了公网IP,但家庭宽带仍然不是固定的。所以我们需要使用DDNS,来绑定我们的域名。

推荐使用cloudflare

我们通过每5min跑一个脚本,通过cloudflare的 api 去上报我们最新IPV6地址,达到我们始终能通过域名正确解析的目的。

以下是脚本

安装 cloudflare sdk


sudo pip install cloudflare


# coding: utf-8

# by longbob

import json

import os

import CloudFlare

CACHE_PATH = os.path.dirname(os.path.abspath(__file__)) + '/cloudfile'

ZONE_NAME = '你的域名 如 baidu.com'

UPDATE_ZONE_NAME = '主机名+域名 如 www.baidu.com'

TOKEN = '你的CloudFlare TOKEN'

EMAIL = '你的CloudFlare 邮箱'

dataFile = CACHE_PATH + '/data'

cf = CloudFlare.CloudFlare(token=TOKEN, email=EMAIL, debug=True)

def set_cloud_file_d_dns(ipv6, dns_record_id, zone_id):

    dns_records = [

        {'name': UPDATE_ZONE_NAME, 'type': 'AAAA', 'content': ipv6, 'proxied': False, 'ttl': 120},

    ]

    for dns_record in dns_records:

        r = cf.zones.dns_records.put(zone_id, dns_record_id, data=dns_record)

    print('更新完成')

def get_cloud_file_info(ipv6):

    if os.path.exists(CACHE_PATH):

        if os.path.isfile(dataFile):

            # 存在缓存数据 直接使用

            fptr = open(dataFile, 'r')

            body = json.loads(fptr.read())

            fptr.close()

            return body

    else:

        # create cache

        os.mkdir(CACHE_PATH, 755)

    # update

    zone_info = cf.zones.get(params={'name': ZONE_NAME})

    zone_id = zone_info[0]['id']

    dns_records = cf.zones.dns_records.get(zone_id, params={'name': UPDATE_ZONE_NAME})

    dns_record_id = dns_records[0]['id']

    res = {'zone_id': zone_id, 'dns_record_id': dns_record_id, 'ipv6': dns_records[0]['content']}

    with open(dataFile, 'w+') as p:

        p.write(json.dumps(res))

    return res

def get_Local_ipv6_address():

    res = os.popen('curl -6 ip.sb')

    return res.read().strip("\n")

if __name__ == '__main__':

    ip = get_Local_ipv6_address()

    info = get_cloud_file_info(ip)

    if ip == info['ipv6']:

        print('nothing to do')

        exit()

    set_cloud_file_d_dns(ip, info['dns_record_id'], info['zone_id'])

添加脚本到定时任务(5分钟执行一次)


cru a up_ipv6_ddns "5/* * * * * python {你的脚本路径}"

#如需要加入开机启动创建crontab

echo "cru a up_ipv6_ddns \"5/* * * * * python {你的脚本路径}\" " > /jffs/scripts/services-start

这样,你就可以在有IPV6的情况下,始终通过域名访问到你的路由器了。

测试域名是否正常解析


ping6 xxx.xxx.com

自动更新防火墙规则

由于上面所述的原因,我们并没有IPV6固定IP,所以我们的 IPV6内网地址会发生变化(前4位);导致我们在开启了防火墙的情况,不能正常的访问。

需要安装bash


#安装bash

opkg update && opkg install bash

把下面的规则模板内容存为一个文件,如 ip6tables.tmpl

ip6tables 规则模板内容


Generated by ip6tables-save v1.4.15 on Wed Feb  3 21:03:42 2021

*mangle

:PREROUTING ACCEPT [45593:41792202]

:INPUT ACCEPT [5649:685720]

:FORWARD ACCEPT [39727:41006577]

:OUTPUT ACCEPT [5721:778530]

:POSTROUTING ACCEPT [45463:41808923]

-A FORWARD -o ppp0 -m hl --hl-gt 30 -m hl --hl-lt 254 -j HL --hl-set 64

-A FORWARD -o ppp0 -m hl --hl-eq 254 -j HL --hl-set 255

COMMIT

# Completed on Wed Feb  3 21:03:42 2021

# Generated by ip6tables-save v1.4.15 on Wed Feb  3 21:03:42 2021

*filter

:INPUT ACCEPT [0:0]

:FORWARD DROP [0:0]

:OUTPUT ACCEPT [5721:778530]

:NSFW - [0:0]

:PControls - [0:0]

:UPNP - [0:0]

:logaccept - [0:0]

:logdrop - [0:0]

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

-A INPUT -i br0 -m state --state NEW -j ACCEPT

-A INPUT -i lo -m state --state NEW -j ACCEPT

-A INPUT -m state --state INVALID -j DROP

-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

-A INPUT -p ipv6-nonxt -m length --length 40 -j ACCEPT

-A INPUT -i br0 -j ACCEPT

-A INPUT -i lo -j ACCEPT

-A INPUT -p udp -m udp --sport 547 --dport 546 -j ACCEPT

-A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 1 -j ACCEPT

-A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 2 -j ACCEPT

-A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 3 -j ACCEPT

-A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 4 -j ACCEPT

-A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 128 -j ACCEPT

-A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 129 -j ACCEPT

-A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 130 -j ACCEPT

-A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 131 -j ACCEPT

-A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 132 -j ACCEPT

-A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 133 -j ACCEPT

-A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 134 -j ACCEPT

-A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 135 -j ACCEPT

-A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 136 -j ACCEPT

-A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 141 -j ACCEPT

-A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 142 -j ACCEPT

-A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 143 -j ACCEPT

-A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 148 -j ACCEPT

-A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 149 -j ACCEPT

-A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 151 -j ACCEPT

-A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 152 -j ACCEPT

-A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 153 -j ACCEPT

-A INPUT -j DROP

-A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

-A FORWARD -i br0 -o ppp0 -j ACCEPT

-A FORWARD -i br0 -o br0 -j ACCEPT

-A FORWARD -m state --state INVALID -j DROP

-A FORWARD -p ipv6-nonxt -m length --length 40 -j ACCEPT

-A FORWARD -p ipv6-icmp -m icmp6 --icmpv6-type 1 -j ACCEPT

-A FORWARD -p ipv6-icmp -m icmp6 --icmpv6-type 2 -j ACCEPT

-A FORWARD -p ipv6-icmp -m icmp6 --icmpv6-type 3 -j ACCEPT

-A FORWARD -p ipv6-icmp -m icmp6 --icmpv6-type 4 -j ACCEPT

-A FORWARD -p ipv6-icmp -m icmp6 --icmpv6-type 128 -j ACCEPT

-A FORWARD -p ipv6-icmp -m icmp6 --icmpv6-type 129 -j ACCEPT

-A FORWARD -d {IPV6SUF}::/64 -p tcp -m state --state NEW -m tcp --dport {你需要开放的端口1} -j ACCEPT

-A FORWARD -d {IPV6SUF}::/64 -p tcp -m state --state NEW -m tcp --dport {你需要开放的端口2} -j ACCEPT

-A FORWARD -d {IPV6SUF}::/64 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

-A FORWARD -d {IPV6SUF}::/64 -p tcp -m state --state NEW -m tcp --dport {你需要开放的端口3} -j ACCEPT

-A FORWARD -j DROP

-A PControls -j ACCEPT

-A logaccept -m state --state NEW -j LOG --log-prefix "ACCEPT " --log-tcp-sequence --log-tcp-options --log-ip-options

-A logaccept -j ACCEPT

-A logdrop -m state --state NEW -j LOG --log-prefix "DROP " --log-tcp-sequence --log-tcp-options --log-ip-options

-A logdrop -j DROP

COMMIT

# Completed on Wed Feb  3 21:03:42 2021" > /j

自动更新防火墙规则脚本


#!/bin/bash

# 更新ip6tables 局域网网段防火墙规则

# 防止因局域网内网IP ISP运营商给变化后 不能访问

# create date 2020/02/03

ip6tablesDumpFile="./ip6tables.dump"

ip6addr=$(ifconfig | grep -E -o "\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}::1/64")

while IFS=':' read -ra ADDR; do

  #取前4位

  ip6suf="${ADDR[0]}:${ADDR[1]}:${ADDR[2]}:${ADDR[3]}"

done <<<"$ip6addr"

file="./ip6Suf.ip"

if [ -f $file ]; then

    cacheIpSuf=$(cat $file)

  else

    cacheIpSuf=""

fi

#写缓存ip

if [ -z $cacheIpSuf ]; then

  echo "$ip6suf" > $file

fi

if [ "$ip6addr" != "$cacheIpSuf::1/64" ]; then

  # 更新

  #替换ip6tables中的局域网段

  ip6tablesRule=$(sed "s/{IPV6SUF}/$ip6suf/g" ./ip6tables.tmpl)

  echo "$ip6tablesRule" >$ip6tablesDumpFile

  #刷新ip6tables

  ip6tables-restore <$ip6tablesDumpFile

  echo "$ip6suf" > $file

  echo "ip6tables rule update succeed"

else

  echo "no thing update"

fi

把脚本存为 up_ip6tables.sh 在命令行输入以下命令


# 加入开机创建crontab

echo "cru a up_ip6tables_rule \"*/5 * * * * bash {你的脚本路径}\"" > /jffs/scripts/services-start

晚安!第一次发这么长的技术文。有不懂的的地方,欢迎留言。

欢迎关注我的个人博客

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容