{"id":365,"date":"2008-11-27T12:38:42","date_gmt":"2008-11-27T03:38:42","guid":{"rendered":"http:\/\/blog.bitmeister.jp\/?p=365"},"modified":"2008-12-16T00:21:16","modified_gmt":"2008-12-15T15:21:16","slug":"tap%e3%83%87%e3%83%90%e3%82%a4%e3%82%b9%e3%81%a7ipv6%e3%83%91%e3%82%b1%e3%83%83%e3%83%88%e3%82%ad%e3%83%a3%e3%83%97%e3%83%81%e3%83%a3","status":"publish","type":"post","link":"https:\/\/blog.bitmeister.jp\/?p=365","title":{"rendered":"TAP\u30c7\u30d0\u30a4\u30b9\u3067IPv6\u30d1\u30b1\u30c3\u30c8\u30ad\u30e3\u30d7\u30c1\u30e3"},"content":{"rendered":"<p>IPv6\u30b7\u30ea\u30fc\u30ba\u7b2c\uff12\u5f3e\uff08\u7b2c\uff13\u5f3e\u304c\u3042\u308b\u304b\u3069\u3046\u304b\u306f\u672a\u5b9a\uff09\u3002<br \/>\nTUN\/TAP\u3092\u4f7f\u3063\u3066\u3001IPv6\u306e\u4eee\u60f3\u30c7\u30d0\u30a4\u30b9\u3092\u4f5c\u3063\u3066\u305d\u3053\u3067IPv6\u306e\u30d1\u30b1\u30c3\u30c8\u3092\u30ad\u30e3\u30d7\u30c1\u30e3\u3059\u308b\u30b5\u30f3\u30d7\u30eb\u3092\u4f5c\u3063\u3066\u307f\u307e\u3057\u305f\u3002<br \/>\n\u3061\u306a\u307f\u306b\u3001\u5358\u7d14\u306b\u30d1\u30b1\u30c3\u30c8\u306e\u5185\u5bb9\u3092\u898b\u305f\u3044\u5834\u5408\u306f\u3001tcpdump\u306a\u3069\u3092\u3054\u5229\u7528\u304f\u3060\u3055\u3044\u3002<br \/>\n\u30d7\u30ed\u30b0\u30e9\u30e0\u306bIPv6\u30d1\u30b1\u30c3\u30c8\u3092\u53d6\u308a\u8fbc\u3093\u3067\u306a\u3093\u3068\u304b\u3057\u305f\u3044\u4eba\u306f\u53c2\u8003\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u3067\u306f\u3055\u3063\u305d\u304f\u30b5\u30f3\u30d7\u30eb\u30d7\u30ed\u30b0\u30e9\u30e0\u3002\u7c21\u5358\u306a\u89e3\u8aac\u306f\u305d\u306e\u3042\u3068\u306b\u66f8\u304d\u307e\u3057\u305f\u3002<br \/>\n<!--more--><br \/>\nipv6dump.c<\/p>\n<pre name=\"code\" class=\"c\">\r\n#include &lt;stdio.h>\r\n#include &lt;stdlib.h>\r\n#include &lt;fcntl.h>\t\t\/* O_RDWR *\/\r\n#include &lt;unistd.h>\r\n#include &lt;string.h>\r\n#include &lt;sys\/ioctl.h>\r\n#include &lt;sys\/socket.h>\r\n#include &lt;sys\/types.h>\r\n#include &lt;sys\/socket.h>\r\n\r\n#include &lt;netinet\/in.h>\r\n#include &lt;netinet\/ip6.h>\r\n#include &lt;arpa\/inet.h>\t\/* ntohs *\/\r\n#include &lt;netdb.h>\t\t\/* getprotobynumber *\/\r\n#include &lt;net\/route.h>\t\/* struct in6_rtmsg *\/\r\n\r\n#include &lt;linux\/if.h>\r\n#include &lt;linux\/if_tun.h>\r\n#include &lt;linux\/if_ether.h>\t\/* struct ethhdr *\/\r\n\r\nint\r\ntun_alloc(char *dev)\r\n{\r\n\tstruct ifreq ifr;\r\n\tint fd, err;\r\n\r\n\tif ( (fd = open(\"\/dev\/net\/tun\", O_RDWR)) &lt; 0) {\r\n\t\tperror(\"open\");\r\n\t\treturn -1;\r\n\t}\r\n\r\n\tmemset(&ifr, 0, sizeof(ifr));\r\n\r\n\t\/* Flag: IFF_TUN   - TUN device ( no ether header )\r\n\t *       IFF_TAP   - TAP device\r\n\t *\r\n\t *       IFF_NO_PI - no packet information\r\n\t *\/\r\n\r\n\tifr.ifr_flags = IFF_TAP | IFF_NO_PI;\r\n\tif (*dev)\r\n\t\tstrncpy(ifr.ifr_name, dev, IFNAMSIZ);\r\n\t\r\n\tif ((err = ioctl(fd, TUNSETIFF, (void *)&ifr)) &lt; 0) {\r\n\t\tperror(\"TUNSETIFF\");\r\n\t\tclose(fd);\r\n\t\treturn err;\r\n\t}\r\n\tstrcpy(dev, ifr.ifr_name);\r\n\treturn fd;\r\n}\r\n\r\nvoid packetdump(const unsigned char *pkt, unsigned length)\r\n{\r\n\tstruct ethhdr *pEther;\r\n\tint rest,i;\r\n\tstruct ip6_hdr *pIpv6;\r\n\tstruct protoent *pProto;\r\n\t\r\n\trest = length;\r\n\t\/* Ether Header *\/\r\n\tif (rest > sizeof(struct ethhdr)) {\r\n\t\tpEther = (struct ethhdr*)pkt;\r\n\t\tprintf(\"--- Ether Header ---n\");\r\n\t\tprintf(\"MAC(dst)n  \");\r\n\t\tfor (i=0; i&lt;ETH_ALEN-1; ++i) {\r\n\t\t\tprintf(\"%02x:\", (unsigned char)pEther->h_dest[i]);\r\n\t\t}\r\n\t\tprintf(\"%02xn\", (unsigned char)pEther->h_dest[i]);\r\n\t\tprintf(\"MAC(src)n  \");\r\n\t\tfor (i=0; i&lt;ETH_ALEN-1; ++i) {\r\n\t\t\tprintf(\"%02x:\", (unsigned char)pEther->h_source[i]);\r\n\t\t}\r\n\t\tprintf(\"%02xn\", (unsigned char)pEther->h_source[i]);\r\n\t\tprintf(\"protocoln\");\r\n\t\tprintf(\"  %04xn\", ntohs(pEther->h_proto));\r\n\r\n\t\trest -= sizeof(struct ethhdr);\r\n\t}\r\n\t\r\n\tif ( ntohs(pEther->h_proto) != ETH_P_IPV6 ) {\r\n\t\treturn;\r\n\t}\r\n \t\/* IPv6 *\/\r\n\tif (rest > sizeof(struct ip6_hdr)) {\r\n\t\tpIpv6 = (struct ip6_hdr*)(pkt + (length - rest));\r\n\t\tprintf(\"--- IPv6 Header ---n\");\r\n\t\tprintf(\"Version:%xn\",pIpv6->ip6_vfc >> 4);\r\n\t\tprintf(\"Traffic Class:%xn\",(ntohl(pIpv6->ip6_flow) >> 20) & 0xFF );\r\n\t\tprintf(\"Flow Label:%05xn\", ntohl(pIpv6->ip6_flow) & 0x000FFFFF );\r\n\t\tprintf(\"Payload Length:%dn\",ntohs(pIpv6->ip6_plen));\r\n\t\tif ((pProto = getprotobynumber(pIpv6->ip6_nxt)) != NULL) {\r\n\t\t\tprintf(\"Next Header:%x(%s)n\",pIpv6->ip6_nxt,pIpv6->ip6_nxt == 0 ? \"HOPOPT\" : pProto->p_name);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tprintf(\"Next Header:%x(unknown)n\",pIpv6->ip6_nxt);\r\n\t\t}\r\n\t\tprintf(\"Hop Limit:%xn\",pIpv6->ip6_hops);\r\n\t\tprintf(\"Source Addressn  \");\r\n\t\tfor (i=0; i&lt;sizeof(pIpv6->ip6_src.s6_addr)-1;i++) {\r\n\t\t\tprintf(\"%02x:\",pIpv6->ip6_src.s6_addr[i]);\r\n\t\t}\r\n\t\tprintf(\"%02xn\",pIpv6->ip6_src.s6_addr[i]);\r\n\t\tprintf(\"Destination Addressn  \");\r\n\t\tfor (i=0; i&lt;sizeof(pIpv6->ip6_dst.s6_addr)-1;i++) {\r\n\t\t\tprintf(\"%02x:\",pIpv6->ip6_dst.s6_addr[i]);\r\n\t\t}\r\n\t\tprintf(\"%02xn\",pIpv6->ip6_dst.s6_addr[i]);\r\n\t\t\r\n\t\trest -= sizeof(struct ip6_hdr);\r\n\t}\r\n\r\n\t\/* payload *\/\r\n\tprintf(\"--- IPv6 Payload(option header) ---\");\r\n\tfor (i=0;i&lt;rest;i++) {\r\n\t\tif (i%16==0) {\r\n\t\t\tprintf(\"n  \");\r\n\t\t}\r\n\t\tprintf(\"%02x \",(unsigned char)*((char*)pkt + (length - rest) + i));\r\n\t}\r\n\tprintf(\"nn\");\r\n}\r\n\r\nint\r\nmain(int argc, char **argv)\r\n{\r\n\tchar dev[IFNAMSIZ];\r\n\tunsigned char buf[BUFSIZ];\r\n\tint fd;\r\n\tfd_set fdset;\r\n\tstruct ifreq ifr;\r\n\tint fd6;\r\n\tstruct in6_rtmsg rt;\r\n\r\n\tif (argc != 2) {\r\n\t\tfprintf(stderr,\"Usage:%s {devicename}n\",argv[0]);\r\n\t\treturn 1;\r\n\t}\r\n\tstrcpy(dev,argv[1]);\r\n\tfd = tun_alloc(dev);\r\n\tif (fd &lt; 0) {\r\n\t\treturn 1;\r\n\t}\r\n\t\/* ifup *\/\r\n\tstrncpy(ifr.ifr_name,dev,IFNAMSIZ);\r\n\tfd6 = socket(PF_INET6,SOCK_DGRAM,0);\r\n\tif (fd6 &lt; 0) {\r\n\t\treturn 1;\r\n\t}\r\n\tif (ioctl(fd6, SIOCGIFFLAGS, &ifr) != 0) {\r\n\t\tperror(\"SIOCGIFFLAGS\");\r\n\t\treturn 1;\r\n\t}\r\n\tifr.ifr_flags |= IFF_UP | IFF_RUNNING;\r\n\tif (ioctl(fd6, SIOCSIFFLAGS, &ifr) != 0) {\r\n\t\tperror(\"SIOCSIFFLAGS\");\r\n\t\treturn 1;\r\n\t}\r\n\t\r\n\tmemset(&rt,0,sizeof(rt));\r\n\t\/* get ifindex *\/\r\n\tmemset(&ifr, 0, sizeof(ifr));\r\n\tstrncpy(ifr.ifr_name,dev,IFNAMSIZ);\r\n\tif (ioctl(fd6, SIOGIFINDEX, &ifr) &lt;0) {\r\n\t\tperror(\"SIOGIFINDEX\");\r\n\t\treturn 1;\r\n\t}\r\n\t\/* route -A inet6 add default dev {devname} *\/\r\n\trt.rtmsg_flags = RTF_UP;\r\n\trt.rtmsg_metric = 1;\r\n\trt.rtmsg_dst_len = 0;\r\n\trt.rtmsg_ifindex = ifr.ifr_ifindex;\r\n\tif (ioctl(fd6, SIOCADDRT, &rt) &lt; 0) {\r\n\t\tperror(\"SIOCADDRT\");\r\n\t\treturn 1;\r\n\t}\r\n\tclose(fd6);\r\n\t\t\r\n\twhile (1) {\r\n\t\tint ret;\r\n\t\tFD_ZERO(&fdset);\r\n\t\tFD_SET(STDIN_FILENO, &fdset);\r\n\t\tFD_SET(fd, &fdset);\r\n\t\tret = select(fd + 1, &fdset, NULL, NULL, NULL);\r\n\t\tif (ret == -1) {\r\n\t\t\tperror(\"select\");\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\tif (FD_ISSET(fd, &fdset)) {\r\n\t\t\tret = read(fd, buf, BUFSIZ);\r\n\t\t\tif (ret == -1)\r\n\t\t\t\tperror(\"read\");\r\n\t\t\tpacketdump(buf, ret);\r\n\t\t}\r\n\t\tif (FD_ISSET(STDIN_FILENO, &fdset)) {\r\n\t\t\tchar buffer[256];\r\n\t\t\tret = read(STDIN_FILENO,buffer,sizeof(buffer));\r\n\t\t\tif (ret &lt; 0 || buffer[0] == 'q')\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\tclose(fd);\r\n\treturn 0;\r\n}\r\n<\/pre>\n<dl>\n<dt>\u78ba\u8a8d\u74b0\u5883<\/dt>\n<dd>Ubuntu 8.04 (kernel 2.6.24-19) gcc 4.2.3<br \/>\n  Fedora8 (kernel 2.6.25.11) gcc 4.1.2<\/dd>\n<p><dt>\u30d3\u30eb\u30c9\u65b9\u6cd5<\/dt>\n<dd>make ipv6dump\u3068\u304bgcc -o ipv6dump ipv6dump.c\u3068\u304b\u3067\u3067\u304d\u307e\u3059\u3002<\/dd>\n<p><dt>\u5b9f\u884c\u65b9\u6cd5<\/dt>\n<dd># ipv6dump tap%d<br \/>\n  \u306a\u3069\u3068\u30b9\u30fc\u30d1\u30fc\u30e6\u30fc\u30b6\u3067\u5b9f\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002<br \/>\n  \u5f15\u6570\u306f\u4eee\u60f3\u30c7\u30d0\u30a4\u30b9\u306e\u540d\u524d\u3002%d\u3068\u304bprintf\u30e9\u30a4\u30af\u306a\u66f8\u5f0f\u3092\u6307\u5b9a\u3057\u3066\u3042\u3052\u308b\u3068OS\u3067\u52dd\u624b\u306b\u756a\u53f7\u3092\u632f\u3063\u3066\u304f\u308c\u307e\u3059\u3002(\u4ed6\u306e\u66f8\u5f0f\u304c\u3069\u308c\u304f\u3089\u3044\u4f7f\u3048\u308b\u306e\u304b\u306f\u77e5\u308a\u307e\u305b\u3093\u3002)<br \/>\n  ping6 2001:db8:1::10\u306a\u3069IPv6\u306e\u30d1\u30b1\u30c3\u30c8\u304c\u767a\u751f\u3059\u308b\u30b3\u30de\u30f3\u30c9\u3092\u5225\u306e\u30b3\u30f3\u30bd\u30fc\u30eb\u304b\u3089\u5165\u529b\u3059\u308b\u3068\u305d\u306e\u30d1\u30b1\u30c3\u30c8(\u3068\u3044\u3046\u304b\u8fd1\u96a3\u63a2\u7d22\u306eICMPv6\u30d1\u30b1\u30c3\u30c8)\u304c\u898b\u3089\u308c\u307e\u3059\u3002<\/dd>\n<p><dt>\u52d5\u4f5c\u306e\u8aac\u660e<\/dt>\n<dd>\u4eee\u60f3\u30c7\u30d0\u30a4\u30b9\u3092IPv6\u30d1\u30b1\u30c3\u30c8\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u30eb\u30fc\u30c8\u306b\u3057\u3066\u3057\u307e\u3063\u3066\u3001\u305d\u3053\u306b\u6d41\u308c\u8fbc\u3093\u3067\u304d\u305fIPv6\u30d1\u30b1\u30c3\u30c8\u306e\u30d8\u30c3\u30c0\u90e8\u5206\uff08\u30aa\u30d7\u30b7\u30e7\u30f3\u542b\u307e\u305a\uff09\u3068\u30da\u30a4\u30ed\u30fc\u30c9\u3092\u8868\u793a\u3059\u308b\u3068\u3044\u3046\u3082\u306e\u3067\u3059\u3002<br \/>\n  \uff08\u4ed6\u306e\u30ce\u30fc\u30c9\u3068\u901a\u4fe1\u4e2d\u306e\u30d1\u30b1\u30c3\u30c8\u3092\u30ad\u30e3\u30d7\u30c1\u30e3\u3059\u308b\u6a5f\u80fd\u306f\u3042\u308a\u307e\u305b\u3093\u3002\uff09<br \/>\n  \u4ed6\u306bIPv6\u306a\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30c7\u30d0\u30a4\u30b9\u304c\u3042\u308b\u5834\u5408\u3001\u305d\u3061\u3089\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u5411\u3051\u306e\u30d1\u30b1\u30c3\u30c8\u306f\u305d\u3061\u3089\u306e\u30c7\u30d0\u30a4\u30b9\u306b\u884c\u304f\u306e\u3067\u8868\u793a\u3055\u308c\u307e\u305b\u3093\u3002\u307e\u305f\u3001\u5225\u306b\u30c7\u30d5\u30a9\u30eb\u30c8\u30eb\u30fc\u30c8\u304c\u5b58\u5728\u3059\u308b\u3068\u304d\u306e\u52d5\u4f5c\u306f\u672a\u78ba\u8a8d\u3067\u3059\u3002<br \/>\n  \u30b3\u30f3\u30bd\u30fc\u30eb\u4e0a\u3067q[Enter]\u3092\u5165\u529b\u3059\u308b\u3068\u7d42\u4e86\u3057\u307e\u3059\u3002<\/dd>\n<p><dt>\u30bd\u30fc\u30b9\u306e\u8aac\u660e<\/dt>\n<dd>\n<dl>\n<dt>22\u884c\u76ee\uff5e<\/dt>\n<dd>TAP\u30c7\u30d0\u30a4\u30b9\u3092\u4f5c\u308b\u51e6\u7406\u3067\u3059\u3002\u53c2\u8003URL\u306b\u8a18\u8f09\u3057\u305f\u30b5\u30a4\u30c8\u306b\u3042\u308b\u3082\u306e\u3092\u53c2\u8003\u306b\u3055\u305b\u3066\u3044\u305f\u3060\u304d\u307e\u3057\u305f\u3002<br \/>\n       TUN\u30c7\u30d0\u30a4\u30b9\u3067\u751f\u306eIPv6\u30d1\u30b1\u30c3\u30c8\u3092\u3068\u308c\u308c\u3070\u697d\u3060\u3063\u305f\u306e\u3067\u3059\u304c\u3001\u3046\u307e\u304f\u3044\u304b\u306a\u304b\u3063\u305f\u306e\u3067TAP\u30c7\u30d0\u30a4\u30b9\u306b\u3066ether\u30d8\u30c3\u30c0\u304b\u3089\u89e3\u6790\u3057\u3066\u3044\u307e\u3059\u3002<\/dd>\n<p><dt>53\u884c\u76ee\uff5e<\/dt>\n<dd>Ether\u30d5\u30ec\u30fc\u30e0 &#8211; IPv6\u30d1\u30b1\u30c3\u30c8\u3092\u89e3\u6790\u3059\u308b\u51e6\u7406\u3067\u3059\u3002<br \/>\n       linux\/ipv6.h\u306b\u3082ipv6_hdr\u3068\u3044\u3046IPv6\u30d1\u30b1\u30c3\u30c8\u306e\u69cb\u9020\u4f53\u306e\u5b9a\u7fa9\u304c\u3042\u3063\u305f\u306e\u3067\u3059\u304c\u3001netinet\/in.h\u3092include\u3059\u308b\u3068\u5b9a\u7fa9\u304c\u91cd\u8907\u3057\u3066\u30b3\u30f3\u30d1\u30a4\u30eb\u30a8\u30e9\u30fc\u306b\u306a\u308a\u307e\u3059\u3002<br \/>\n       \u30b3\u30f3\u30d1\u30a4\u30eb\u30a8\u30e9\u30fc\u306f\u56de\u907f\u3067\u304d\u308b\u306e\u3067\u3059\u304c\u3001RFC3542\u3067\u306fnetinet\/ip6.h\u306b\u5b9a\u7fa9\u304c\u66f8\u3044\u3066\u3042\u308b\u3053\u3068\u306b\u306a\u3063\u3066\u3044\u308b\u306e\u3067\u3001\u4eca\u56de\u306f\u305d\u3061\u3089\u306e\u65b9\u306b\u5408\u308f\u305b\u307e\u3057\u305f\u3002<br \/>\n       \u30aa\u30d7\u30b7\u30e7\u30f3\u30d8\u30c3\u30c0\u306f\u89e3\u6790\u3057\u3066\u3044\u307e\u305b\u3093\u3002\uff08\u3061\u3083\u3093\u3068\u66f8\u304f\u3068\u5927\u5909\u305d\u3046\u3060\u3063\u305f\u306e\u3067\u3084\u3081\u307e\u3057\u305f\u3002\u3002\uff09<\/dd>\n<p><dt>144\u884c\u76ee\uff5e<\/dt>\n<dd>IPv6\u306e\u30bd\u30b1\u30c3\u30c8\u3067ifup\u3059\u308b\u3068\u3001\u30ea\u30f3\u30af\u30ed\u30fc\u30ab\u30eb\u30a2\u30c9\u30ec\u30b9\u304c(OS\u306b\u3088\u3063\u3066)\u5272\u308a\u5f53\u3066\u3089\u308c\u308b\u3088\u3046\u3067\u3059\u3002<br \/>\n       \u3044\u3061\u3044\u3061\u5916\u90e8\u30b3\u30de\u30f3\u30c9\u3067up\u3059\u308b\u306e\u3082\u3042\u308c\u306a\u306e\u3067\u3001\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u4e2d\u306b\u66f8\u304d\u307e\u3057\u305f\u3002<\/dd>\n<p><dt>168\u884c\u76ee\uff5e<\/dt>\n<dd>\u4f5c\u3063\u305f\u30c7\u30d0\u30a4\u30b9\u3092IPv6\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u30eb\u30fc\u30c8\u306b\u3059\u308b\u51e6\u7406\u3067\u3059\u3002\u3053\u308c\u3082\u3044\u3061\u3044\u3061\u5916\u90e8\u30b3\u30de\u30f3\u30c9\u3067\u8a2d\u5b9a\u3059\u308b\u306e\u304c\u3042\u308c\u3060\u3063\u305f\u306e\u3067\u3001\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u4e2d\u306b\u66f8\u304d\u307e\u3057\u305f\u3002<\/dd>\n<\/dl>\n<\/dd>\n<p><dt>\u53c2\u8003URL<\/dt>\n<dd><a href=\"http:\/\/www.geekpage.jp\/programming\/linux-network\/set-ifup.php\">\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092up\u72b6\u614b\u306b\u3059\u308b<\/a><br \/>\n  <a href=\"http:\/\/www.linux.or.jp\/JF\/JFdocs\/kernel-docs-2.4\/networking\/tuntap.txt.html\">\u30e6\u30cb\u30d0\u30fc\u30b5\u30eb TUN\/TAP \u30c7\u30d0\u30a4\u30b9\u30c9\u30e9\u30a4\u30d0\u306b\u3064\u3044\u3066<\/a><br \/>\n  <a href=\"http:\/\/www5d.biglobe.ne.jp\/~stssk\/ipv6.html\">IPv6\u306eRFC<\/a><\/dd>\n<\/dl>\n<p><b>12\/15\u8a02\u6b63\uff1a\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306epIpv6->ip6_flow\u306bntohl\u3092\u3064\u3051\u5fd8\u308c\u3066\u3044\u305f\u306e\u3067\u4fee\u6b63\u3057\u307e\u3057\u305f<\/b><\/p>\n","protected":false},"excerpt":{"rendered":"<p>IPv6\u30b7\u30ea\u30fc\u30ba\u7b2c\uff12\u5f3e\uff08\u7b2c\uff13\u5f3e\u304c\u3042\u308b\u304b\u3069\u3046\u304b\u306f\u672a\u5b9a\uff09\u3002 TUN\/TAP\u3092\u4f7f\u3063\u3066\u3001IPv6\u306e\u4eee\u60f3\u30c7\u30d0\u30a4\u30b9\u3092\u4f5c\u3063\u3066\u305d\u3053\u3067IPv6\u306e\u30d1\u30b1\u30c3\u30c8\u3092\u30ad\u30e3\u30d7\u30c1\u30e3\u3059\u308b\u30b5\u30f3\u30d7\u30eb\u3092\u4f5c\u3063\u3066\u307f\u307e\u3057\u305f\u3002 \u3061\u306a\u307f\u306b\u3001\u5358\u7d14\u306b\u30d1\u30b1\u30c3\u30c8\u306e\u5185\u5bb9\u3092\u898b\u305f\u3044\u5834\u5408 [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17],"tags":[48,18,40,24],"class_list":["post-365","post","type-post","status-publish","format-standard","hentry","category-tech","tag-ipv6","tag-linux","tag-40","tag-24"],"_links":{"self":[{"href":"https:\/\/blog.bitmeister.jp\/index.php?rest_route=\/wp\/v2\/posts\/365","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.bitmeister.jp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.bitmeister.jp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.bitmeister.jp\/index.php?rest_route=\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.bitmeister.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=365"}],"version-history":[{"count":7,"href":"https:\/\/blog.bitmeister.jp\/index.php?rest_route=\/wp\/v2\/posts\/365\/revisions"}],"predecessor-version":[{"id":412,"href":"https:\/\/blog.bitmeister.jp\/index.php?rest_route=\/wp\/v2\/posts\/365\/revisions\/412"}],"wp:attachment":[{"href":"https:\/\/blog.bitmeister.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=365"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.bitmeister.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=365"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.bitmeister.jp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=365"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}