CRMMC的个人博客
  • near_me
    首  页
  • inbox
    归  档
    keyboard_arrow_down
    view_week
    分  类
    keyboard_arrow_down
    layers
    页  面
    keyboard_arrow_down
  • rss_feed
    R S S
  • description 文  章
    4
  • textsms 评  论
    0
  • 苦逼苦逼
    记录下我wireguard设置NAT6(使用路由进行IPV6 NAT)的过程

    access_time
    brush 597个字
    whatshot 587 ℃

    记录下我为openwrt的wireguard设置NAT6(使用路由进行IPV6 NAT)的过程

    为什么要使用NAT6呢? IPV6的优点和好处不就是地址数量多到用不完,所以可以让每一个设备都拥有属于他的全球唯一IPV6地址吗?

    这是因为,出于安全考虑,某些设备需要躲在NAT后面安全的访问互联网,而且对于wireguard这种无法进行IPV6 PD/DHCP分配的协议来说,亦或者是其他的VPN (例如 openvpn) 自动分配的IPV6地址是临时IPV6地址,需要NAT6才能让下级客户端拥有访问IPV6网络的能力.

    亦或者你的路由可怜的只能拿到/128的IPV6地址,为了让路由器下的设备都能访问IPV6网站,不得不使用NAT6了

    基本配置wireguard不再赘述

    决定wireguard的网段

    我这里使用

    IPV4: 10.3.3.1 /24
    IPV6: dd01:ffa1::1 / 64

    这里的IPV4和IPV6都是内部地址,如果想要外网访问内部地址就需要在网关处做NAT,而想要内部地址访问外网也需要网关NAT

    而wireguard的NAT能力由操作系统提供, 例如我在 openwrt (Linux Base)上搭建,就需要用到iptables 和 ip6tables进行NAT配置

    打开系统的数据包转发能力

    1. 往系统配置文件 /etc/sysctl.conf 内加入
      
      net.ipv4.ip_forward = 1
      net.ipv6.conf.all.forwarding = 1

    分别打开IPV4和IPV6的内核包转发,保存文件后使用以下命令生效

    # sysctl -p /etc/sysctl.conf

    
    ### 打开iptables的对应端口数据包转发
    #### 这里假设,wg0为wireguard端口,而eth2为外网连接出口
    

    iptables -I FORWARD -i wg0 -o eth2 -j ACCEPT
    ip6tables -I FORWARD -i wg0 -o eth2 -j ACCEPT

    现在,由于netfilter/iptables是一个无状态的防火墙,我们需要让 iptables 允许已建立的连接通过。要做到这点,我们要运行下面的命令。

    iptables -A FORWARD -i eth2 -o wg0 -m state --state ESTABLISHED,RELATED -j ACCEPT

    我不确定这一句是否有用,这是网上某些帖子说的,我自己没有加这一句

    最后,添加自动源地址转换条目
    iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
    ip6tables -t nat -A POSTROUTING -o eth2 -j MASQUERADE

    为了保险起见,我使用的是只对指定的源IP的数据包进行自动转发
    iptables -t nat -A POSTROUTING -s ${wireguard_ipv4_localnet} -o eth2 -j MASQUERADE
    ip6tables -t nat -A POSTROUTING -s ${wireguard_ipv6_localnet} -o eth2 -j MASQUERADE

    警告:
    如果不指定-o的话,就允许其数据包根据网关路由表自动选择合适的接口转发数据包,此举可能造成一定的危险,造成内网随意互访,谨慎使用

    
    
    
    ### 此时还是不能正常访问外网的话
    
    #### 如果尝试ping网关的wireguard地址,IPV4 /IPV6均可以ping通,那就怀疑是不是网关的IPV4/ IPV6路由表未设置完成
    

    ip -6 route add default from ${wireguard_ipv6_localnet} dev ${out_dev}

    
    
    
    ### 一般到这里,wireguard客户端们就可以正常的使用网络了,包括IPV4和IPV6

    #如无特别声明,该文章均为 苦逼苦逼 原创,转载请遵循 署名-非商业性使用 4.0 国际(CC BY-NC 4.0) 协议,即转载请注明文章来源。
    #最后编辑时间为: 2024 年 03 月 07 日





    关于 DreamCat

    主题名称:DreamCat | 版本:2.8.221001(LTS)

    主题开发:HanFengA7 | TeddyNight | Dev-Leo | CornWorld | WhiteBearcn | DFFZMXJ

    Designed by HanFengA7 Power by Typecho

    Copyright © 2015-2025 by LychApe All rights reserved!

    加我的QQ
    加我的微博
    加我的支付宝
    加我的微信