Saber 发表于 2022-12-27 21:31:17

分享一个基于官方代码编译的FullCone NAT的固件

本帖最后由 Saber 于 2022-12-31 21:46 编辑

众所周知,FullCone NAT在P2P 游戏、BT种子应用中的重要性。当前AXT1800的官方固件不支持FullCone NAT功能,实属遗憾,大雕的AXT1800固件虽然支持FullCone,但是不支持AXT1800的风扇和无线驱动,论坛中也有兄弟问过这方面的问题,然而官方没有给出简单的解决方法。
本人在研究了Openwrt的防火墙特性后,编译了一个分享基于官方代码编译的支持FullCone NAT的固件,内核4.4,请各位有FullCone环境的兄弟帮忙测试一下功能。

后期如果用到的人多,我会分享一下自编译相关固件实现FullCone NAT的方法

使用方法,.img为Uboot刷入文件,.tar通过“系统→升级/备份→刷写新的固件” 刷入,然后在“网络→fullconenat”开启相关功能,目前仅测试了仅用“禁用”和全局FullCone,后续再测试IP功能



链接:https://pan.baidu.com/s/1uYGcCQjtt7V1XcpxFRBYMQ?pwd=d49y
提取码:d49y

wsz2074480 发表于 2022-12-31 15:58:16

感谢分享!顶上去

m0eak 发表于 2022-12-31 16:40:23

失效了失效了失效了

Saber 发表于 2022-12-31 21:47:36

本帖最后由 Saber 于 2022-12-31 21:56 编辑

m0eak 发表于 2022-12-31 16:40
失效了失效了失效了
我更新了下固件,分享地址也更新了,测试一下后麻烦回我一下结果{:5_117:}

m0eak 发表于 2023-1-1 13:11:35

Saber 发表于 2022-12-31 21:47
我更新了下固件,分享地址也更新了,测试一下后麻烦回我一下结果 ...

有官方界面吗

Saber 发表于 2023-1-1 13:16:42

本帖最后由 Saber 于 2023-1-1 13:18 编辑

m0eak 发表于 2023-1-1 13:11
有官方界面吗
那个我暂时没有做,官方界面内容是固定死的,做出来也是得进openwrt界面才能调,你需要的话,可以加我一个V,tu1994ya,我给你做一个,另外,新年快乐啊!

m0eak 发表于 2023-1-2 14:19:12

Saber 发表于 2023-1-1 13:16
那个我暂时没有做,官方界面内容是固定死的,做出来也是得进openwrt界面才能调,你需要的话,可以加我一个 ...

能分享一下方法吗

Saber 发表于 2023-1-3 00:57:27

m0eak 发表于 2023-1-2 14:19
能分享一下方法吗

完全没问题,只不过不是装一个插件那么简单,需要编译固件,你有相关基础的话,我可以告诉你

nihaolai 发表于 2023-1-14 01:57:12

m0eak 发表于 2023-1-28 14:23:52

Saber 发表于 2023-1-3 00:57
完全没问题,只不过不是装一个插件那么简单,需要编译固件,你有相关基础的话,我可以告诉你 ...

我会编译,大概怎么操作啊

Saber 发表于 2023-2-1 20:02:50

m0eak 发表于 2023-1-28 14:23
我会编译,大概怎么操作啊

主要是三步:
第一步要给内核打补丁,把LGA1150佬的补丁https://github.com/LGA1150/openwrt-fullconenat放在feeds/package里面,注意更新一下feeds;第二步给防火墙的代码打上FullCone的补丁,你需要在package/network/config/patches建一个空的补丁,命名为0100-fullconenat.patch,AXT1800的官方代码和Openwrt的防火墙代码不太一样,所以得调一下官方的代码的位置,我这有个写好的,你可以直接用:

--- a/defaults.c
+++ b/defaults.c
@@ -48,7 +48,9 @@ const struct fw3_option fw3_flag_opts[] = {
        FW3_OPT("synflood_protect",    bool,   defaults, syn_flood),
        FW3_OPT("synflood_rate",       limit,    defaults, syn_flood_rate),
        FW3_OPT("synflood_burst",      int,      defaults, syn_flood_rate.burst),
-
+       
+        FW3_OPT("fullcone",         bool,   defaults, fullcone),
+       
        FW3_OPT("tcp_syncookies",      bool,   defaults, tcp_syncookies),
        FW3_OPT("tcp_ecn",             int,      defaults, tcp_ecn),
        FW3_OPT("tcp_window_scaling",bool,   defaults, tcp_window_scaling),
--- a/options.h
+++ b/options.h
@@ -296,6 +296,7 @@ struct fw3_defaults
        enum fw3_reject_code tcp_reject_code;
        enum fw3_reject_code any_reject_code;

+        bool fullcone;
        bool syn_flood;
        struct fw3_limit syn_flood_rate;

--- a/zones.c
+++ b/zones.c
@@ -670,6 +670,7 @@ print_zone_rule(struct fw3_ipt_handle *h
        struct fw3_address *msrc;
        struct fw3_address *mdest;
        struct fw3_ipt_rule *r;
+        struct fw3_defaults *defs = &state->defaults;

        if (!fw3_is_family(zone, handle->family))
                return;
@@ -755,8 +756,22 @@ print_zone_rule(struct fw3_ipt_handle *h
                                {
                                        r = fw3_ipt_rule_new(handle);
                                        fw3_ipt_rule_src_dest(r, msrc, mdest);
-                                        fw3_ipt_rule_target(r, "MASQUERADE");
-                                        fw3_ipt_rule_append(r, "zone_%s_postrouting", zone->name);
+                                        /*FIXME: Workaround for FULLCONE-NAT*/
+                                        if(defs->fullcone)
+                                        {
+                                                warn("%s will enable FULLCONE-NAT", zone->name);
+                                                fw3_ipt_rule_target(r, "FULLCONENAT");
+                                                fw3_ipt_rule_append(r, "zone_%s_postrouting", zone->name);
+                                                r = fw3_ipt_rule_new(handle);
+                                                fw3_ipt_rule_src_dest(r, msrc, mdest);
+                                                fw3_ipt_rule_target(r, "FULLCONENAT");
+                                                fw3_ipt_rule_append(r, "zone_%s_prerouting", zone->name);
+                                        }
+                                        else
+                                        {
+                                                fw3_ipt_rule_target(r, "MASQUERADE");
+                                                fw3_ipt_rule_append(r, "zone_%s_postrouting", zone->name);
+                                        }
                                }
                        }
                }



第三步,加入一个启动FullCone NAT的luci界面,https://github.com/peter-tank/luci-app-fullconenat,编译的时候勾上,它会自动勾上第一步的模块

Saber 发表于 2023-2-1 20:04:05

m0eak 发表于 2023-1-28 14:23
我会编译,大概怎么操作啊

我觉得这个对于官方来说就是一个举手之劳,前面也有些人提过这个功能请求,我不太理解为啥他们不愿意做进去

m0eak 发表于 2023-2-4 20:48:30

Saber 发表于 2023-2-1 20:02
主要是三步:
第一步要给内核打补丁,把LGA1150佬的补丁https://github.com/LGA1150/openwrt-fullconenat ...

好的谢谢,我去试一下

Saber 发表于 2023-2-4 21:20:58

m0eak 发表于 2023-2-4 20:48
好的谢谢,我去试一下

成功了告诉我一下

m0eak 发表于 2023-2-5 13:49:13

Saber 发表于 2023-2-4 21:20
成功了告诉我一下

编译成功了,但还没刷进去,编译的包里看到了luci-app-fullconenat_1.3_all.ipk,和iptables-mod-fullconenat_2018-12-15-d4daedd0-1_arm_cortex-a7.ipk,那个修改的patch网上有教程吗,我想看看

m0eak 发表于 2023-2-5 14:40:36

刷上了,并且能够运行,我把他尝试弄进云编译里:lol

Saber 发表于 2023-2-6 11:14:14

m0eak 发表于 2023-2-5 14:40
刷上了,并且能够运行,我把他尝试弄进云编译里

看看你那边能FullCone NAT吗{:5_117:}

m0eak 发表于 2023-2-7 13:25:44

Saber 发表于 2023-2-6 11:14
看看你那边能FullCone NAT吗

麻了,我发现他过一会自己就会not running了

Saber 发表于 2023-2-7 19:28:14

m0eak 发表于 2023-2-7 13:25
麻了,我发现他过一会自己就会not running了

这个需要你手动点一下all enable那个,或者你写个开机自启,添加一些fullcone防火墙规则。这个好像会和NAT6有冲突,要注意
页: [1]
查看完整版本: 分享一个基于官方代码编译的FullCone NAT的固件