searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

nat

2024-06-17 07:05:44
1
0

NAT的实现是由 ip_conntrack, iptable_nat组成
1. IP conntrack
a. init
struct nf_conntrack_l3proto nf_conntrack_l3proto_ipv4 __read_mostly = {
        .l3proto         = PF_INET,
        .name            = "ipv4",
        .pkt_to_tuple    = ipv4_pkt_to_tuple,
        .invert_tuple    = ipv4_invert_tuple,
        .print_tuple     = ipv4_print_tuple,
        .get_l4proto     = ipv4_get_l4proto
};
struct nf_conntrack_l4proto nf_conntrack_l4proto_tcp4 __read_mostly =
{
        .l3proto                = PF_INET,
        .l4proto                = IPPROTO_TCP,
        .name                   = "tcp",
        .pkt_to_tuple           = tcp_pkt_to_tuple,
        .invert_tuple           = tcp_invert_tuple,
        .print_tuple            = tcp_print_tuple,
        .print_conntrack        = tcp_print_conntrack,
        .packet                 = tcp_packet,
        .get_timeouts           = tcp_get_timeouts,
        .new                    = tcp_new,
        .error                  = tcp_error,
};
struct nf_conntrack_l4proto nf_conntrack_l4proto_udp6 __read_mostly =
{
        .l3proto                = PF_INET6,
        .l4proto                = IPPROTO_UDP,
        .name                   = "udp",
        .pkt_to_tuple           = udp_pkt_to_tuple,
        .invert_tuple           = udp_invert_tuple,
        .print_tuple            = udp_print_tuple,
        .packet                 = udp_packet,
        .get_timeouts           = udp_get_timeouts,
        .new                    = udp_new,
        .error                  = udp_error,
};

int nf_conntrack_l3proto_ipv4_init(void)
{
        /*register ipv4 tcp handler*/
        ret = nf_ct_l4proto_register(&nf_conntrack_l4proto_tcp4);

        /*register ipv4 udp handler*/
        ret = nf_ct_l4proto_register(&nf_conntrack_l4proto_udp4);

        /*register ipv4 icmp handler*/
        ret = nf_ct_l4proto_register(&nf_conntrack_l4proto_icmp);

        /*register ipv4 handler*/
        ret = nf_ct_l3proto_register(&nf_conntrack_l3proto_ipv4);
}

0条评论
作者已关闭评论
w****n
15文章数
0粉丝数
w****n
15 文章 | 0 粉丝
w****n
15文章数
0粉丝数
w****n
15 文章 | 0 粉丝
原创

nat

2024-06-17 07:05:44
1
0

NAT的实现是由 ip_conntrack, iptable_nat组成
1. IP conntrack
a. init
struct nf_conntrack_l3proto nf_conntrack_l3proto_ipv4 __read_mostly = {
        .l3proto         = PF_INET,
        .name            = "ipv4",
        .pkt_to_tuple    = ipv4_pkt_to_tuple,
        .invert_tuple    = ipv4_invert_tuple,
        .print_tuple     = ipv4_print_tuple,
        .get_l4proto     = ipv4_get_l4proto
};
struct nf_conntrack_l4proto nf_conntrack_l4proto_tcp4 __read_mostly =
{
        .l3proto                = PF_INET,
        .l4proto                = IPPROTO_TCP,
        .name                   = "tcp",
        .pkt_to_tuple           = tcp_pkt_to_tuple,
        .invert_tuple           = tcp_invert_tuple,
        .print_tuple            = tcp_print_tuple,
        .print_conntrack        = tcp_print_conntrack,
        .packet                 = tcp_packet,
        .get_timeouts           = tcp_get_timeouts,
        .new                    = tcp_new,
        .error                  = tcp_error,
};
struct nf_conntrack_l4proto nf_conntrack_l4proto_udp6 __read_mostly =
{
        .l3proto                = PF_INET6,
        .l4proto                = IPPROTO_UDP,
        .name                   = "udp",
        .pkt_to_tuple           = udp_pkt_to_tuple,
        .invert_tuple           = udp_invert_tuple,
        .print_tuple            = udp_print_tuple,
        .packet                 = udp_packet,
        .get_timeouts           = udp_get_timeouts,
        .new                    = udp_new,
        .error                  = udp_error,
};

int nf_conntrack_l3proto_ipv4_init(void)
{
        /*register ipv4 tcp handler*/
        ret = nf_ct_l4proto_register(&nf_conntrack_l4proto_tcp4);

        /*register ipv4 udp handler*/
        ret = nf_ct_l4proto_register(&nf_conntrack_l4proto_udp4);

        /*register ipv4 icmp handler*/
        ret = nf_ct_l4proto_register(&nf_conntrack_l4proto_icmp);

        /*register ipv4 handler*/
        ret = nf_ct_l3proto_register(&nf_conntrack_l3proto_ipv4);
}

文章来自个人专栏
完成任务
15 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0