# 為 Arch Linux-based Home Router 增加 FullConeNat **Published by:** [jet tsang zeon-git](https://paragraph.com/@jettsang/) **Published on:** 2022-04-17 **URL:** https://paragraph.com/@jettsang/arch-linux-based-home-router-fullconenat ## Content 最近組了一台 All In One,於是把自家的 BPI-R2 替換成了跑在 Proxmox 的 ArchLinux 作為 pppoe client 的軟路由。 迫於 Linux 沒有自帶 FullCone 方式的 Nat,本文將示範為 ArchLinux 增加 FullCone Nat。 1. 獲得 Source Code # iptables git clone git://git.netfilter.org/iptables.git # netfilter-full-cone-nat git clone https://github.com/Chion82/netfilter-full-cone-nat.git # kernel 5.15+ 補丁 curl -o netfilter-full-cone-nat/linux-5.15.patch https://raw.githubusercontent.com/archlinux/svntogit-community/packages/netfilter-fullconenat/trunk/linux-5.15.patch 2. 補丁 # 對於 kernel 5.15+ 需要為原始碼打補丁,不然無法成功編譯 ko。 patch -p1 -i netfilter-full-cone-nat/linux-5.15.patch netfilter-full-cone-nat/xt_FULLCONENAT.c 3. 編譯&安裝 # 讓內核支持 cd netfilter-full-cone-nat make # 使用 zstd 壓縮 ko zstd xt_FULLCONENAT.ko # 複製內核模塊到內核模塊目錄 cp netfilter-full-cone-nat/xt_FULLCONENAT.ko.zst /usr/lib/modules/$(</usr/src/linux/version)/kernel/net/netfilter # 生成內核模塊映射 sudo depmod # 啟用模塊 sudo modprobe xt_FULLCONENAT echo xt_FULLCONENAT > /etc/modules-load.d/xt_FULLCONENAT.conf # 讓 iptables 支持 # 把擴展原始碼複製到 iptables 的原始碼擴展目錄 cp netfilter-full-cone-nat/libipt_FULLCONENAT.c iptables/extensions/ # 編譯之 cd iptables ./autogen.sh ./configure --prefix=/usr make # 把該擴展複製到 xtables 目錄以使 iptables 得以支持 FullCone nat sudo cp extensions/libipt_FULLCONENAT.so /usr/lib/xtables 4. 完成 自此 ArchLinux 到 iptables 即支持 FullCone Nat 了。使用如下指令即可使用。 # 把 ppp0 作為出口的情況 sudo iptables -t nat -A POSTROUTING -o ppp0 -j FULLCONENAT sudo iptables -t nat -A PREROUTING -i ppp0 -j FULLCONENAT 此時在你的內網中找一台安裝了 pystun3 的電腦: $ pystun3 NAT Type: Full Cone External IP: x.x.x.x External Port: 2333 如此一來就完成啦。 ## Publication Information - [jet tsang zeon-git](https://paragraph.com/@jettsang/): Publication homepage - [All Posts](https://paragraph.com/@jettsang/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@jettsang): Subscribe to updates - [Twitter](https://twitter.com/jetsanix): Follow on Twitter