blog.hugopoi.net/www/.content.EZtzwPjb/html/174622b5fab11001618709ce3ff73f402b7e9acc.00000266.html

650 lines
53 KiB
HTML
Raw Permalink Normal View History

<!DOCTYPE html>
<html lang="fr-FR">
<head>
<meta charset='UTF-8'>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="profile" href="http://gmpg.org/xfn/11">
<link rel="pingback" href="/xmlrpc.php">
<title>Do a wifi repeater with only one wifi card and Debian &#8211; HugoPoi</title>
<meta name='robots' content='max-image-preview:large' />
<link rel='dns-prefetch' href='//fonts.googleapis.com' />
<link rel='dns-prefetch' href='//s.w.org' />
<link rel="alternate" type="application/rss+xml" title="HugoPoi &raquo; Flux" href="/feed/" />
<link rel="alternate" type="application/rss+xml" title="HugoPoi &raquo; Flux des commentaires" href="/comments/feed/" />
<link rel="alternate" type="application/rss+xml" title="HugoPoi &raquo; Do a wifi repeater with only one wifi card and Debian Flux des commentaires" href="/2021/12/21/do-a-wifi-repeater-with-only-one-wifi-card-and-debian/feed/" />
<script type="text/javascript">
window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/13.0.1\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/13.0.1\/svg\/","svgExt":".svg","source":{"concatemoji":"https:\/\/blog.hugopoi.net\/wp-includes\/js\/wp-emoji-release.min.js?ver=5.7.4"}};
!function(e,a,t){var n,r,o,i=a.createElement("canvas"),p=i.getContext&&i.getContext("2d");function s(e,t){var a=String.fromCharCode;p.clearRect(0,0,i.width,i.height),p.fillText(a.apply(this,e),0,0);e=i.toDataURL();return p.clearRect(0,0,i.width,i.height),p.fillText(a.apply(this,t),0,0),e===i.toDataURL()}function c(e){var t=a.createElement("script");t.src=e,t.defer=t.type="text/javascript",a.getElementsByTagName("head")[0].appendChild(t)}for(o=Array("flag","emoji"),t.supports={everything:!0,everythingExceptFlag:!0},r=0;r<o.length;r++)t.supports[o[r]]=function(e){if(!p||!p.fillText)return!1;switch(p.textBaseline="top",p.font="600 32px Arial",e){case"flag":return s([127987,65039,8205,9895,65039],[127987,65039,8203,9895,65039])?!1:!s([55356,56826,55356,56819],[55356,56826,8203,55356,56819])&&!s([55356,57332,56128,56423,56128,56418,56128,56421,56128,56430,56128,56423,56128,56447],[55356,57332,8203,56128,56423,8203,56128,56418,8203,56128,56421,8203,56128,56430,8203,56128,56423,8203,56128,56447]);case"emoji":return!s([55357,56424,8205,55356,57212],[55357,56424,8203,55356,57212])}return!1}(o[r]),t.supports.everything=t.supports.everything&&t.supports[o[r]],"flag"!==o[r]&&(t.supports.everythingExceptFlag=t.supports.everythingExceptFlag&&t.supports[o[r]]);t.supports.everythingExceptFlag=t.supports.everythingExceptFlag&&!t.supports.flag,t.DOMReady=!1,t.readyCallback=function(){t.DOMReady=!0},t.supports.everything||(n=function(){t.readyCallback()},a.addEventListener?(a.addEventListener("DOMContentLoaded",n,!1),e.addEventListener("load",n,!1)):(e.attachEvent("onload",n),a.attachEvent("onreadystatechange",function(){"complete"===a.readyState&&t.readyCallback()})),(n=t.source||{}).concatemoji?c(n.concatemoji):n.wpemoji&&n.twemoji&&(c(n.twemoji),c(n.wpemoji)))}(window,document,window._wpemojiSettings);
</script>
<style type="text/css">
img.wp-smiley,
img.emoji {
display: inline !important;
border: none !important;
box-shadow: none !important;
height: 1em !important;
width: 1em !important;
margin: 0 .07em !important;
vertical-align: -0.1em !important;
background: none !important;
padding: 0 !important;
}
</style>
<link rel='stylesheet' id='wp-block-library-css' href='/wp-includes/css/dist/block-library/style.min.css?ver=5.7.4' type='text/css' media='all' />
<link rel='stylesheet' id='wp-syntax-css-css' href='/wp-content/plugins/wp-syntax/css/wp-syntax.css?ver=1.1' type='text/css' media='all' />
<link rel='stylesheet' id='bootstrap-css' href='/wp-content/themes/hestia/assets/bootstrap/css/bootstrap.min.css?ver=1.0.2' type='text/css' media='all' />
<link rel='stylesheet' id='hestia-font-sizes-css' href='/wp-content/themes/hestia/assets/css/font-sizes.min.css?ver=3.0.16' type='text/css' media='all' />
<link rel='stylesheet' id='hestia_style-css' href='/wp-content/themes/hestia/style.min.css?ver=3.0.16' type='text/css' media='all' />
<style id='hestia_style-inline-css' type='text/css'>
.hestia-top-bar, .hestia-top-bar .widget.widget_shopping_cart .cart_list {
background-color: #363537
}
.hestia-top-bar .widget .label-floating input[type=search]:-webkit-autofill {
-webkit-box-shadow: inset 0 0 0px 9999px #363537
}.hestia-top-bar, .hestia-top-bar .widget .label-floating input[type=search], .hestia-top-bar .widget.widget_search form.form-group:before, .hestia-top-bar .widget.widget_product_search form.form-group:before, .hestia-top-bar .widget.widget_shopping_cart:before {
color: #ffffff
}
.hestia-top-bar .widget .label-floating input[type=search]{
-webkit-text-fill-color:#ffffff !important
}
.hestia-top-bar div.widget.widget_shopping_cart:before, .hestia-top-bar .widget.widget_product_search form.form-group:before, .hestia-top-bar .widget.widget_search form.form-group:before{
background-color: #ffffff
}.hestia-top-bar a, .hestia-top-bar .top-bar-nav li a {
color: #ffffff
}
.hestia-top-bar ul li a[href*="mailto:"]:before, .hestia-top-bar ul li a[href*="tel:"]:before{
background-color: #ffffff
}
.hestia-top-bar a:hover, .hestia-top-bar .top-bar-nav li a:hover {
color: #eeeeee
}
.hestia-top-bar ul li:hover a[href*="mailto:"]:before, .hestia-top-bar ul li:hover a[href*="tel:"]:before{
background-color: #eeeeee
}
a,
.navbar .dropdown-menu li:hover > a,
.navbar .dropdown-menu li:focus > a,
.navbar .dropdown-menu li:active > a,
.navbar .navbar-nav > li .dropdown-menu li:hover > a,
body:not(.home) .navbar-default .navbar-nav > .active:not(.btn) > a,
body:not(.home) .navbar-default .navbar-nav > .active:not(.btn) > a:hover,
body:not(.home) .navbar-default .navbar-nav > .active:not(.btn) > a:focus,
a:hover,
.card-blog a.moretag:hover,
.card-blog a.more-link:hover,
.widget a:hover,
.has-text-color.has-accent-color,
p.has-text-color a {
color:#05ad13;
}
.svg-text-color{
fill:#05ad13;
}
.pagination span.current, .pagination span.current:focus, .pagination span.current:hover {
border-color:#05ad13
}
button,
button:hover,
.woocommerce .track_order button[type="submit"],
.woocommerce .track_order button[type="submit"]:hover,
div.wpforms-container .wpforms-form button[type=submit].wpforms-submit,
div.wpforms-container .wpforms-form button[type=submit].wpforms-submit:hover,
input[type="button"],
input[type="button"]:hover,
input[type="submit"],
input[type="submit"]:hover,
input#searchsubmit,
.pagination span.current,
.pagination span.current:focus,
.pagination span.current:hover,
.btn.btn-primary,
.btn.btn-primary:link,
.btn.btn-primary:hover,
.btn.btn-primary:focus,
.btn.btn-primary:active,
.btn.btn-primary.active,
.btn.btn-primary.active:focus,
.btn.btn-primary.active:hover,
.btn.btn-primary:active:hover,
.btn.btn-primary:active:focus,
.btn.btn-primary:active:hover,
.hestia-sidebar-open.btn.btn-rose,
.hestia-sidebar-close.btn.btn-rose,
.hestia-sidebar-open.btn.btn-rose:hover,
.hestia-sidebar-close.btn.btn-rose:hover,
.hestia-sidebar-open.btn.btn-rose:focus,
.hestia-sidebar-close.btn.btn-rose:focus,
.label.label-primary,
.hestia-work .portfolio-item:nth-child(6n+1) .label,
.nav-cart .nav-cart-content .widget .buttons .button,
.has-accent-background-color[class*="has-background"] {
background-color: #05ad13;
}
@media (max-width: 768px) {
.navbar-default .navbar-nav>li>a:hover,
.navbar-default .navbar-nav>li>a:focus,
.navbar .navbar-nav .dropdown .dropdown-menu li a:hover,
.navbar .navbar-nav .dropdown .dropdown-menu li a:focus,
.navbar button.navbar-toggle:hover,
.navbar .navbar-nav li:hover > a i {
color: #05ad13;
}
}
body:not(.woocommerce-page) button:not([class^="fl-"]):not(.hestia-scroll-to-top):not(.navbar-toggle):not(.close),
body:not(.woocommerce-page) .button:not([class^="fl-"]):not(hestia-scroll-to-top):not(.navbar-toggle):not(.add_to_cart_button):not(.product_type_grouped):not(.product_type_external),
div.wpforms-container .wpforms-form button[type=submit].wpforms-submit,
input[type="submit"],
input[type="button"],
.btn.btn-primary,
.widget_product_search button[type="submit"],
.hestia-sidebar-open.btn.btn-rose,
.hestia-sidebar-close.btn.btn-rose,
.everest-forms button[type=submit].everest-forms-submit-button {
-webkit-box-shadow: 0 2px 2px 0 rgba(5,173,19,0.14),0 3px 1px -2px rgba(5,173,19,0.2),0 1px 5px 0 rgba(5,173,19,0.12);
box-shadow: 0 2px 2px 0 rgba(5,173,19,0.14),0 3px 1px -2px rgba(5,173,19,0.2),0 1px 5px 0 rgba(5,173,19,0.12);
}
.card .header-primary, .card .content-primary,
.everest-forms button[type=submit].everest-forms-submit-button {
background: #05ad13;
}
body:not(.woocommerce-page) .button:not([class^="fl-"]):not(.hestia-scroll-to-top):not(.navbar-toggle):not(.add_to_cart_button):hover,
body:not(.woocommerce-page) button:not([class^="fl-"]):not(.hestia-scroll-to-top):not(.navbar-toggle):not(.close):hover,
div.wpforms-container .wpforms-form button[type=submit].wpforms-submit:hover,
input[type="submit"]:hover,
input[type="button"]:hover,
input#searchsubmit:hover,
.widget_product_search button[type="submit"]:hover,
.pagination span.current,
.btn.btn-primary:hover,
.btn.btn-primary:focus,
.btn.btn-primary:active,
.btn.btn-primary.active,
.btn.btn-primary:active:focus,
.btn.btn-primary:active:hover,
.hestia-sidebar-open.btn.btn-rose:hover,
.hestia-sidebar-close.btn.btn-rose:hover,
.pagination span.current:hover,
.everest-forms button[type=submit].everest-forms-submit-button:hover,
.everest-forms button[type=submit].everest-forms-submit-button:focus,
.everest-forms button[type=submit].everest-forms-submit-button:active {
-webkit-box-shadow: 0 14px 26px -12px rgba(5,173,19,0.42),0 4px 23px 0 rgba(0,0,0,0.12),0 8px 10px -5px rgba(5,173,19,0.2);
box-shadow: 0 14px 26px -12px rgba(5,173,19,0.42),0 4px 23px 0 rgba(0,0,0,0.12),0 8px 10px -5px rgba(5,173,19,0.2);
color: #fff;
}
.form-group.is-focused .form-control {
background-image: -webkit-gradient(linear,left top, left bottom,from(#05ad13),to(#05ad13)),-webkit-gradient(linear,left top, left bottom,from(#d2d2d2),to(#d2d2d2));
background-image: -webkit-linear-gradient(linear,left top, left bottom,from(#05ad13),to(#05ad13)),-webkit-linear-gradient(linear,left top, left bottom,from(#d2d2d2),to(#d2d2d2));
background-image: linear-gradient(linear,left top, left bottom,from(#05ad13),to(#05ad13)),linear-gradient(linear,left top, left bottom,from(#d2d2d2),to(#d2d2d2));
}
.navbar:not(.navbar-transparent) li:not(.btn):hover > a,
.navbar li.on-section:not(.btn) > a,
.navbar.full-screen-menu.navbar-transparent li:not(.btn):hover > a,
.navbar.full-screen-menu .navbar-toggle:hover,
.navbar:not(.navbar-transparent) .nav-cart:hover,
.navbar:not(.navbar-transparent) .hestia-toggle-search:hover {
color:#05ad13
}
.header-filter-gradient {
background: linear-gradient(45deg, rgba(168,29,132,1) 0%, rgb(234,57,111) 100%);
}
.has-text-color.has-header-gradient-color { color: #a81d84; }
.has-header-gradient-background-color[class*="has-background"] { background-color: #a81d84; }
.has-text-color.has-background-color-color { color: #000000; }
.has-background-color-background-color[class*="has-background"] { background-color: #000000; }
.btn.btn-primary:not(.colored-button):not(.btn-left):not(.btn-right):not(.btn-just-icon):not(.menu-item), input[type="submit"]:not(.search-submit), body:not(.woocommerce-account) .woocommerce .button.woocommerce-Button, .woocommerce .product button.button, .woocommerce .product button.button.alt, .woocommerce .product #respond input#submit, .woocommerce-cart .blog-post .woocommerce .cart-collaterals .cart_totals .checkout-button, .woocommerce-checkout #payment #place_order, .woocommerce-account.woocommerce-page button.button, .woocommerce .track_order button[type="submit"], .nav-cart .nav-cart-content .widget .buttons .button, .woocommerce a.button.wc-backward, body.woocommerce .wccm-catalog-item a.button, body.woocommerce a.wccm-button.button, form.woocommerce-form-coupon button.button, div.wpforms-container .wpforms-form button[type=submit].wpforms-submit, div.woocommerce a.button.alt, div.woocommerce table.my_account_orders .button, .btn.colored-button, .btn.btn-left, .btn.btn-right, .btn:not(.colored-button):not(.btn-left):not(.btn-right):not(.btn-just-icon):not(.menu-item):not(.hestia-sidebar-open):not(.hestia-sidebar-close){ padding-top:15px; padding-bottom:15px; padding-left:33px; padding-right:33px; }
.btn.btn-primary:not(.colored-button):not(.btn-left):not(.btn-right):not(.btn-just-icon):not(.menu-item), input[type="submit"]:not(.search-submit), body:not(.woocommerce-account) .woocommerce .button.woocommerce-Button, .woocommerce .product button.button, .woocommerce .product button.button.alt, .woocommerce .product #respond input#submit, .woocommerce-cart .blog-post .woocommerce .cart-collaterals .cart_totals .checkout-button, .woocommerce-checkout #payment #place_order, .woocommerce-account.woocommerce-page button.button, .woocommerce .track_order button[type="submit"], .nav-cart .nav-cart-content .widget .buttons .button, .woocommerce a.button.wc-backward, body.woocommerce .wccm-catalog-item a.button, body.woocommerce a.wccm-button.button, form.woocommerce-form-coupon button.button, div.wpforms-container .wpforms-form button[type=submit].wpforms-submit, div.woocommerce a.button.alt, div.woocommerce table.my_account_orders .button, input[type="submit"].search-submit, .hestia-view-cart-wrapper .added_to_cart.wc-forward, .woocommerce-product-search button, .woocommerce-cart .actions .button, #secondary div[id^=woocommerce_price_filter] .button, .woocommerce div[id^=woocommerce_widget_cart].widget .buttons .button, .searchform input[type=submit], .searchform button, .search-form:not(.media-toolbar-primary) input[type=submit], .search-form:not(.media-toolbar-primary) button, .woocommerce-product-search input[type=submit], .btn.colored-button, .btn.btn-left, .btn.btn-right, .btn:not(.colored-button):not(.btn-left):not(.btn-right):not(.btn-just-icon):not(.menu-item):not(.hestia-sidebar-open):not(.hestia-sidebar-close){border-radius:3px;}
@media (min-width: 769px){
.page-header.header-small .hestia-title,
.page-header.header-small .title,
h1.hestia-title.title-in-content,
.main article.section .has-title-font-size {
font-size: 42px;
}}
</style>
<link rel='stylesheet' id='hestia_fonts-css' href='https://fonts.googleapis.com/css?family=Roboto%3A300%2C400%2C500%2C700%7CRoboto+Slab%3A400%2C700&#038;subset=latin%2Clatin-ext&#038;ver=3.0.16' type='text/css' media='all' />
<script type='text/javascript' src='/wp-includes/js/jquery/jquery.min.js?ver=3.5.1' id='jquery-core-js'></script>
<script type='text/javascript' src='/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.3.2' id='jquery-migrate-js'></script>
<link rel="https://api.w.org/" href="/wp-json/" /><link rel="alternate" type="application/json" href="/wp-json/wp/v2/posts/1308" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="/xmlrpc.php?rsd" />
<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="/wp-includes/wlwmanifest.xml" />
<meta name="generator" content="WordPress 5.7.4" />
<link rel="canonical" href="/2021/12/21/do-a-wifi-repeater-with-only-one-wifi-card-and-debian/" />
<link rel='shortlink' href='/?p=1308' />
<link rel="alternate" type="application/json+oembed" href="/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fblog.hugopoi.net%2F2021%2F12%2F21%2Fdo-a-wifi-repeater-with-only-one-wifi-card-and-debian%2F" />
<link rel="alternate" type="text/xml+oembed" href="/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fblog.hugopoi.net%2F2021%2F12%2F21%2Fdo-a-wifi-repeater-with-only-one-wifi-card-and-debian%2F&#038;format=xml" />
<meta name="description" content="" />
<style type="text/css" id="custom-background-css">
body.custom-background { background-color: #000000; }
</style>
<style type="text/css" id="wp-custom-css">
@media only screen and (min-width:1440px){
/* styles for browsers larger than 1440px; */
.container{
width: 1600px;
}
}
.wp-block {
max-width: initial;
} </style>
</head>
<body class="post-template-default single single-post postid-1308 single-format-standard custom-background blog-post header-layout-default">
<div class="wrapper post-1308 post type-post status-publish format-standard hentry category-bidouille category-internet-2 category-ip-v6 default ">
<header class="header ">
<div style="display: none"></div> <nav class="navbar navbar-default navbar-fixed-top hestia_left navbar-not-transparent">
<div class="container">
<div class="navbar-header">
<div class="title-logo-wrapper">
<a class="navbar-brand" href="/"
title="HugoPoi">
<p>HugoPoi</p></a>
</div>
<div class="navbar-toggle-wrapper">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#main-navigation">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="sr-only">Déplier la navigation</span>
</button>
</div>
</div>
<div id="main-navigation" class="collapse navbar-collapse"><ul id="menu-main-menu" class="nav navbar-nav"><li id="menu-item-985" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-home menu-item-985"><a title="Home" href="/">Home</a></li>
<li id="menu-item-1281" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-1281"><a title="Videos" href="https://stream.hugopoi.net/channel/1/">Videos</a></li>
</ul></div> </div>
</nav>
</header>
<div id="primary" class="boxed-layout-header page-header header-small" data-parallax="active" ><div class="container"><div class="row"><div class="col-md-10 col-md-offset-1 text-center"><h1 class="hestia-title entry-title">Do a wifi repeater with only one wifi card and Debian</h1><h4 class="author">Publié par <a href="/author/hugopoi/" class="vcard author"><strong class="fn">HugoPoi</strong></a> le <time class="entry-date published" datetime="2021-12-21T17:41:27+01:00" content="2021-12-21">21 décembre 2021</time></h4></div></div></div><div class="header-filter" style="background-image: url(/wp-content/uploads/2017/06/IMG_20170528_085824.jpg);"></div></div>
<div class="main main-raised ">
<div class="blog-post blog-post-wrapper">
<div class="container">
<article id="post-1308" class="section section-text">
<div class="row">
<div class="col-md-8 single-post-container" data-layout="sidebar-right">
<div class="single-post-wrap entry-content"><h2>Summary</h2>
<p>I wanted to extend the range of an existing wifi access point without cables or changing the configuration. It&rsquo;s a temporary installation, and I doesn&rsquo;t want do buy more hardware and use what I have on hand.</p>
<h2>Hardware</h2>
<ul>
<li>A Olimex Lime 2 board but anything running debian will work</li>
<li>An Atheros AR9271 or any wifi card that support concurrent mode operation</li>
</ul>
<h3>Wifi concurrent mode</h3>
<p>The wifi concurrent mode is a feature implemented in some drivers for wifi chipset allowing multiple virtual wlan network cards. Those can works in different mode like client station « managed » mode and access point mode at the same time.<br />
You can check about it with <code>iw list | grep 'valid interface combinations' -A3</code>.<br />
The Atheros AR9271 is compatible, but it&rsquo;s a very old chipset, and only 2.4Ghz with one antenna.<br />
As reported in this <a class="wp-editor-md-post-content-link" href="https://www.0xf8.org/2016/02/using-your-raspberry-pi-zeros-usb-wifi-adapter-as-both-wifi-client-and-access-point/" title="VERY good blog post">VERY good blog post</a>, Ralink only support multiple access point but not managed+ap, Realtek doesn&rsquo;t support anything. So you have Atheros chipset and Intel ones that have been reported to work.</p>
<h2>How to</h2>
<h3>0. Hardware drivers</h3>
<p>You may need to install some close source firmware for your wifi adapter for better performance or even have your wifi card working.</p>
<p>For Atheros based cards <code>apt install firmware-atheros</code> is enought.</p>
<h3>1. Setup virtuals adapters with a <code>iw</code> and a <code>udev</code> rule</h3>
<p>Insert the following into <code>/etc/udev/rules.d/70-persistent-net.rules</code></p>
<pre><code class="language-bash ">SUBSYSTEM=="ieee80211", ACTION=="add|change", ATTR{macaddress}=="00:11:22:33:44:55", KERNEL=="phy0", \
RUN+="/sbin/iw dev wlan0 del", \
RUN+="/sbin/iw phy phy0 interface add ap0 type __ap", \
RUN+="/sbin/iw phy phy0 interface add sta0 type station", \
RUN+="/bin/ip link set sta0 address 00:11:22:33:44:56"
</code></pre>
<ul>
<li>You need to replace <code>00:11:22:33:44:55</code> with the mac address of your wifi adapter, <code>ip link</code> command should help you we that.</li>
<li>You need to replace <code>00:11:22:33:44:56</code> with the mac address of your adapter +1, or something completely random as long as sta0 and ap0 will have different mac address.</li>
</ul>
<h3>2. The access point ap0 configuration</h3>
<ul>
<li>Will use <code>hostapd</code> started by ifup script<br />
Create a file <code>/etc/network/interfaces.d/ap0.conf</code> with this content :</li>
</ul>
<pre><code class="language-bash ">allow-hotplug ap0
iface ap0 inet manual
hostapd /etc/hostapd/repeater.conf
</code></pre>
<h4>2.1 The HostAPd configuration file <code>/etc/hostapd/repeater.conf</code></h4>
<pre><code class="language-bash ">interface=ap0
hw_mode=g
ieee80211n=1
wmm_enabled=1
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
# you need the same channel as the client side
channel=6
#bss=hotspot0
ssid=Your_SSID
wpa=2
wpa_passphrase=yourpassphrase
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
</code></pre>
<ul>
<li><code>Your_SSID</code> can be the same as your main access point.</li>
</ul>
<h3>3. The client station sta0 configuration</h3>
<ul>
<li>Fully handle by ifup</li>
<li>I explain all the commands just below</li>
</ul>
<p>Create a file <code>/etc/network/interfaces.d/sta0.conf</code> with this content :</p>
<pre><code class="language-bash ">auto sta0
allow-hotplug sta0
iface sta0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
# 3.1 Setup the bridge between the two interfaces
post-up /usr/sbin/parprouted ap0 sta0
post-down /usr/bin/killall /usr/sbin/parprouted
# clone the dhcp-allocated IP to eth0 so dhcp-helper will relay for the correct subnet
post-up /sbin/ip addr add $(/sbin/ip addr show sta0 | perl -wne 'm|^\s+inet (.*)/| &amp;&amp; print $1')/32 dev ap0
post-down /sbin/ip addr del $(/sbin/ip addr show ap0 | perl -wne 'm|^\s+inet (.*)/| &amp;&amp; print $1')/32 dev ap0
# 3.22 bis DHCP Server in place of relay with `dnsmasq`
# post-up /usr/sbin/dnsmasq --port=0 --interface=ap0 --dhcp-range=192.168.1.100,192.168.1.150 --dhcp-option=option:netmask,255.255.255.0 --dhcp-option=option:router,192.168.1.254 --dhcp-option=option:dns-server,80.67.169.12 --pid-file=/var/run/dnsmasq.pid
# post-down /usr/bin/kill $(cat /var/run/dnsmasq.pid)
</code></pre>
<p>You need a WPA supplicant config file in <code>/etc/wpa_supplicant/wpa_supplicant.conf</code></p>
<pre><code class="language-bash ">ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="Main_SSID"
psk="yourpassphrase"
}
</code></pre>
<h4>3.1 Setup the bridge between the two interfaces</h4>
<ul>
<li>We need to have the layer 2, bridged between sta0 and ap0</li>
<li>As reported in <a class="wp-editor-md-post-content-link" href="https://wiki.debian.org/BridgeNetworkConnections#Bridging_with_a_wireless_NIC" title="Debian wiki">Debian wiki</a> you can use <code>ebtables</code> for doing so. But you need to know each mac address and ip connected to ap0 and add manually the entry in ebtables. So I opt in for a more all-in-one approach and bridging network connections with Proxy ARP seems more easy to do.</li>
<li><a class="wp-editor-md-post-content-link" href="https://wiki.debian.org/BridgeNetworkConnectionsProxyArp#Automating_the_Process" title="Automating the process of bridging with arp proxy">Automating the process of bridging with arp proxy</a></li>
</ul>
<p>You need to install <code>parprouted</code> with <code>apt install parprouted</code>.</p>
<p>So now the layer 2 is ok for unicast, but broadcast will not work for dhcp request so you need dhcp relay.</p>
<h4>3.2 Dhcp Relay for Ip v4 with <code>dhcp-helper</code></h4>
<p><strong>WARNING this will not work with some dhcp very regarding about source mac address which will be the same for multiple ip address. Like Freebox v5. So might try this but if it&rsquo;s not working use the 3.22</strong></p>
<p>Enable DHCP relay: <code>/etc/default/dhcp-helper</code></p>
<pre><code class="language-bash "># relay dhcp requests as broadcast to sta0
DHCPHELPER_OPTS="-b sta0"
</code></pre>
<h4>3.22 bis DHCP Server in place of relay with <code>dnsmasq</code></h4>
<p>If DHCP relay isn&rsquo;t working, we just need to add a DHCP Server listening on <code>ap0</code> to deliver some ips outside of the main range.<br />
1. <code>apt install dnsmasq</code><br />
2. uncomment this 2 lines in <code>/etc/network/interfaces.d/sta0.conf</code></p>
<pre><code class="language-bash ">post-up /usr/sbin/dnsmasq --port=0 --interface=ap0 --dhcp-range=192.168.1.100,192.168.1.150 --dhcp-option=option:netmask,255.255.255.0 --dhcp-option=option:router,192.168.1.254 --dhcp-option=option:dns-server,80.67.169.12 --pid-file=/var/run/dnsmasq.pid
post-down /usr/bin/kill $(cat /var/run/dnsmasq.pid)
</code></pre>
<h3>4. IPv6 support</h3>
<ul>
<li>I haven&rsquo;t successfully made ipv6 work but I leave some clues here.</li>
<li>You need 2 things for ipv6 to work, a mean to deliver some address and a way to do arp for the layer 2 aka Neighbor Discovery Protocol.</li>
<li>I found this article very helpfull <a class="wp-editor-md-post-content-link" href="http://mkaczanowski.com/ndppd-ipv6-ndp-proxy/">IPv6 NDP proxy</a></li>
</ul>
<h4>4.1 Radvd</h4>
<ul>
<li>First you can run <code>radvdump</code> to capture a starting configuration.</li>
<li>A lot of provider use SLAAC to allocate address in v6.</li>
</ul>
<p><em>Example of SLAAC radvd configuration file</em></p>
<pre><code class="language-nginx ">interface ap0
{
AdvSendAdvert on;
# Note: {Min,Max}RtrAdvInterval cannot be obtained with radvdump
AdvManagedFlag off;
AdvOtherConfigFlag off;
AdvReachableTime 0;
AdvRetransTimer 0;
AdvCurHopLimit 64;
AdvDefaultLifetime 1800;
AdvHomeAgentFlag off;
AdvDefaultPreference medium;
AdvLinkMTU 1500;
AdvSourceLLAddress on;
prefix 2a01:xxxx:xxx:xxx::/64
{
AdvValidLifetime 86400;
AdvPreferredLifetime 86400;
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr off;
}; # End of prefix definition
RDNSS fd0f:ee:b0::1
{
AdvRDNSSLifetime 86400;
}; # End of RDNSS definition
};
</code></pre>
<ul>
<li>Once <code>radvd</code> configured and started your clients on <code>ap0</code> should obtain some ipv6 address.</li>
<li>But these will not work out of the box because the main router can&rsquo;t know that these adress are used and reachable.</li>
</ul>
<h4>4.2 ndppd</h4>
<ul>
<li><code>ndppd</code> daemon will forward Neighbor Solicitation messages to the clients. Then the cilents will respond with a Neighbor Advertisement for the router.</li>
</ul>
<pre><code class="language-nginx ">proxy sta0 {
autowire yes # Not sure about this option
rule 2a01:xxxx:xxxx:xxxx::/64 {
iface ap0
}
}
</code></pre>
</div>
<div class="section section-blog-info">
<div class="row">
<div class="col-md-6">
<div class="entry-categories">Catégories : <span class="label label-primary"><a href="/category/bidouille/">Bidouille</a></span><span class="label label-primary"><a href="/category/internet-2/">Internet</a></span><span class="label label-primary"><a href="/category/dossiers/ip-v6/">IP v6</a></span> </div>
</div>
<div class="col-md-6">
<div class="entry-social">
<a target="_blank" rel="tooltip"
data-original-title="Partager sur Facebook"
class="btn btn-just-icon btn-round btn-facebook"
href="https://www.facebook.com/sharer.php?u=https://blog.hugopoi.net/2021/12/21/do-a-wifi-repeater-with-only-one-wifi-card-and-debian/">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512" width="20" height="17"><path fill="currentColor" d="M279.14 288l14.22-92.66h-88.91v-60.13c0-25.35 12.42-50.06 52.24-50.06h40.42V6.26S260.43 0 225.36 0c-73.22 0-121.08 44.38-121.08 124.72v70.62H22.89V288h81.39v224h100.17V288z"></path></svg>
</a>
<a target="_blank" rel="tooltip"
data-original-title="Partager sur Twitter"
class="btn btn-just-icon btn-round btn-twitter"
href="http://twitter.com/share?url=https://blog.hugopoi.net/2021/12/21/do-a-wifi-repeater-with-only-one-wifi-card-and-debian/&#038;text=Do%20a%20wifi%20repeater%20with%20only%20one%20wifi%20card%20and%20Debian">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="20" height="17"><path fill="currentColor" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"></path></svg>
</a>
<a rel="tooltip"
data-original-title=" Partager par e-mail"
class="btn btn-just-icon btn-round"
href="mailto:?subject=Do%20a%20wifi%20repeater%20with%20only%20one%20wifi%20card%20and%20Debian&#038;body=https://blog.hugopoi.net/2021/12/21/do-a-wifi-repeater-with-only-one-wifi-card-and-debian/">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="20" height="17"><path fill="currentColor" d="M502.3 190.8c3.9-3.1 9.7-.2 9.7 4.7V400c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V195.6c0-5 5.7-7.8 9.7-4.7 22.4 17.4 52.1 39.5 154.1 113.6 21.1 15.4 56.7 47.8 92.2 47.6 35.7.3 72-32.8 92.3-47.6 102-74.1 131.6-96.3 154-113.7zM256 320c23.2.4 56.6-29.2 73.4-41.4 132.7-96.3 142.8-104.7 173.4-128.7 5.8-4.5 9.2-11.5 9.2-18.9v-19c0-26.5-21.5-48-48-48H48C21.5 64 0 85.5 0 112v19c0 7.4 3.4 14.3 9.2 18.9 30.6 23.9 40.7 32.4 173.4 128.7 16.8 12.2 50.2 41.8 73.4 41.4z"></path></svg>
</a>
</div>
</div> </div>
<hr>
<div id="comments" class="section section-comments">
<div class="row">
<div class="col-md-12">
<div class="media-area">
<h3 class="hestia-title text-center">
0 commentaire </h3>
</div>
<div class="media-body">
<div id="respond" class="comment-respond">
<h3 class="hestia-title text-center">Laisser un commentaire <small><a rel="nofollow" id="cancel-comment-reply-link" href="/2021/12/21/do-a-wifi-repeater-with-only-one-wifi-card-and-debian/#respond" style="display:none;">Annuler la réponse</a></small></h3> <span class="pull-left author"> <div class="avatar"><img src="/wp-content/themes/hestia/assets/img/placeholder.jpg" height="64" width="64"/></div> </span><form action="https://blog.hugopoi.net/wp-comments-post.php" method="post" id="commentform" class="form media-body"><p class="comment-notes"><span id="email-notes">Votre adresse e-mail ne sera pas publiée.</span> Les champs obligatoires sont indiqués avec <span class="required">*</span></p><div class="row"> <div class="col-md-4"> <div class="form-group label-floating is-empty"> <label class="control-label">Nom <span class="required">*</span></label><input id="author" name="author" class="form-control" type="text" aria-required='true' /> <span class="hestia-input"></span> </div> </div>
<div class="col-md-4"> <div class="form-group label-floating is-empty"> <label class="control-label">E-mail <span class="required">*</span></label><input id="email" name="email" class="form-control" type="email" aria-required='true' /> <span class="hestia-input"></span> </div> </div>
<div class="col-md-4"> <div class="form-group label-floating is-empty"> <label class="control-label">Site internet</label><input id="url" name="url" class="form-control" type="url" aria-required='true' /> <span class="hestia-input"></span> </div> </div> </div>
<div class="form-group label-floating is-empty"> <label class="control-label">Quavez vous à lesprit ?</label><textarea id="comment" name="comment" class="form-control" rows="6" aria-required="true"></textarea><span class="hestia-input"></span> </div><p class="form-submit"><input name="submit" type="submit" id="submit" class="btn btn-primary pull-right" value="Laisser un commentaire" /> <input type='hidden' name='comment_post_ID' value='1308' id='comment_post_ID' />
<input type='hidden' name='comment_parent' id='comment_parent' value='0' />
</p><p style="display: none;"><input type="hidden" id="akismet_comment_nonce" name="akismet_comment_nonce" value="9867382f93" /></p><input type="hidden" id="ak_js" name="ak_js" value="190"/><textarea name="ak_hp_textarea" cols="45" rows="8" maxlength="100" style="display: none !important;"></textarea></form> </div><!-- #respond -->
</div>
</div>
</div>
</div>
</div>
</div> <div class="col-md-3 blog-sidebar-wrapper col-md-offset-1">
<aside id="secondary" class="blog-sidebar" role="complementary">
<div id="text-2" class="widget widget_text"><h5>Edito</h5> <div class="textwidget">Bienvenu sur mon blog, ici je parle de bricolage, de web (version de base). Blog perso sans prétention je poste quand j'ai le temps en plus j'aime pas écrire.</div>
</div><div id="text-6" class="widget widget_text"><h5>Hébergé gracieusement par</h5> <div class="textwidget"><div style="text-align: center"><a href="http://www.majewan.fr"><img src="/wp-content/uploads/2015/01/path22.png" alt="logo Majewan Interactive" style="width: 50%; padding: 1em;"></a></div></div>
</div><div id="custom_html-2" class="widget_text widget widget_custom_html"><h5>MASTODON</h5><div class="textwidget custom-html-widget"><a rel="me" href="https://mastodon.hugopoi.net/@hugopoi">@Hugopoi</a></div></div><div id="twitter-2" class="widget widget_twitter"><div><h5><span class='twitterwidget twitterwidget-title'>Twitter: hugopoi</span></h5><ul><li><span class='entry-content'>RT <a href="http://twitter.com/carm_ina" class="twitter-user">@carm_ina</a>: Allez, petit thread rapide en rapport avec les media et le traitement du porno.
Hier, une chaîne de télé m'appelle pour me f…</span> <span class='entry-meta'><span class='time-meta'><a href="http://twitter.com/HugoPoi/statuses/1471432453902544903">11:50:09 décembre 16, 2021</a></span> <span class='from-meta'>from <a href="https://about.twitter.com/products/tweetdeck" rel="nofollow">TweetDeck</a></span></span> <span class="intent-meta"><a href="http://twitter.com/intent/tweet?in_reply_to=1471432453902544903" data-lang="fr" class="in-reply-to" title="Reply">Reply</a><a href="http://twitter.com/intent/retweet?tweet_id=1471432453902544903" data-lang="fr" class="retweet" title="Retweet">Retweet</a><a href="http://twitter.com/intent/favorite?tweet_id=1471432453902544903" data-lang="fr" class="favorite" title="Favorite">Favorite</a></span></li><li><span class='entry-content'>RT <a href="http://twitter.com/molly_struve" class="twitter-user">@molly_struve</a>: indexes can be helpful as well <a href="https://t.co/lSGnXpRqtU">https://t.co/lSGnXpRqtU</a></span> <span class='entry-meta'><span class='time-meta'><a href="http://twitter.com/HugoPoi/statuses/1470877572380643331">11:05:15 décembre 14, 2021</a></span> <span class='from-meta'>from <a href="https://github.com/TwidereProject" rel="nofollow">Twidere for Android</a></span></span> <span class="intent-meta"><a href="http://twitter.com/intent/tweet?in_reply_to=1470877572380643331" data-lang="fr" class="in-reply-to" title="Reply">Reply</a><a href="http://twitter.com/intent/retweet?tweet_id=1470877572380643331" data-lang="fr" class="retweet" title="Retweet">Retweet</a><a href="http://twitter.com/intent/favorite?tweet_id=1470877572380643331" data-lang="fr" class="favorite" title="Favorite">Favorite</a></span></li><li><span class='entry-content'>It looks good but I think the charger is dead, only ~600mV, seems low, I read 6V is the standby output <a href="https://t.co/VP8zHZSZ31">https://t.co/VP8zHZSZ31</a></span> <span class='entry-meta'><span class='time-meta'><a href="http://twitter.com/HugoPoi/statuses/1470737097619353609">01:47:03 décembre 14, 2021</a></span> <span class='from-meta'>from <a href="https://crossposter.hugopoi.net/" rel="nofollow">Mastodon To Twitter HugoPoi</a></span></span> <span class="intent-meta"><a href="http://twitter.com/intent/tweet?in_reply_to=1470737097619353609" data-lang="fr" class="in-reply-to" title="Reply">Reply</a><a href="http://twitter.com/intent/retweet?tweet_id=1470737097619353609" data-lang="fr" class="retweet" title="Retweet">Retweet</a><a href="http://twitter.com/intent/favorite?tweet_id=1470737097619353609" data-lang="fr" class="favorite" title="Favorite">Favorite</a></span></li><li><span class='entry-content'>RT <a href="http://twitter.com/brutofficiel" class="twitter-user">@brutofficiel</a>: "On ne peut pas dire 'J'irai en réa si je suis malade.' C'est pas possible."
À l'hôpital de Colmar, sur les 17 patients…</span> <span class='entry-meta'><span class='time-meta'><a href="http://twitter.com/HugoPoi/statuses/1470697799146737666">11:10:54 décembre 14, 2021</a></span> <span class='from-meta'>from <a href="https://github.com/TwidereProject" rel="nofollow">Twidere for Android</a></span></span> <span class="intent-meta"><a href="http://twitter.com/intent/tweet?in_reply_to=1470697799146737666" data-lang="fr" class="in-reply-to" title="Reply">Reply</a><a href="http://twitter.com/intent/retweet?tweet_id=1470697799146737666" data-lang="fr" class="retweet" title="Retweet">Retweet</a><a href="http://twitter.com/intent/favorite?tweet_id=1470697799146737666" data-lang="fr" class="favorite" title="Favorite">Favorite</a></span></li><li><span class='entry-content'>RT <a href="http://twitter.com/Ls01" class="twitter-user">@Ls01</a>: - Bonjour je vous appelle pour le compte formation...
- Ah super, j'attendais votre appel... Notez bien mon prénom dans votre pla…</span> <span class='entry-meta'><span class='time-meta'><a href="http://twitter.com/HugoPoi/statuses/1470697767257485315">11:10:46 décembre 14, 2021</a></span> <span class='from-meta'>from <a href="https://github.com/TwidereProject" rel="nofollow">Twidere for Android</a></span></span> <span class="intent-meta"><a href="http://twitter.com/intent/tweet?in_reply_to=1470697767257485315" data-lang="fr" class="in-reply-to" title="Reply">Reply</a><a href="http://twitter.com/intent/retweet?tweet_id=1470697767257485315" data-lang="fr" class="retweet" title="Retweet">Retweet</a><a href="http://twitter.com/intent/favorite?tweet_id=1470697767257485315" data-lang="fr" class="favorite" title="Favorite">Favorite</a></span></li><li><span class='entry-content'>.@Darty c'est en simple :
* Pas de facture
* Un appareil reçu défectueux
* Aucune solution de réparation
* Un SAV q… <a href="https://t.co/pGn3Cd2JEW">https://t.co/pGn3Cd2JEW</a></span> <span class='entry-meta'><span class='time-meta'><a href="http://twitter.com/HugoPoi/statuses/1468992623000100867">06:15:08 décembre 09, 2021</a></span> <span class='from-meta'>from <a href="https://about.twitter.com/products/tweetdeck" rel="nofollow">TweetDeck</a></span></span> <span class="intent-meta"><a href="http://twitter.com/intent/tweet?in_reply_to=1468992623000100867" data-lang="fr" class="in-reply-to" title="Reply">Reply</a><a href="http://twitter.com/intent/retweet?tweet_id=1468992623000100867" data-lang="fr" class="retweet" title="Retweet">Retweet</a><a href="http://twitter.com/intent/favorite?tweet_id=1468992623000100867" data-lang="fr" class="favorite" title="Favorite">Favorite</a></span></li><li><span class='entry-content'>Bonjour, <a href="http://twitter.com/Darty" class="twitter-user">@Darty</a> c'est plus possible je crois on est a un niveau pas mal niveau violation du droit de la consommatio… <a href="https://t.co/JPZL84NhjO">https://t.co/JPZL84NhjO</a></span> <span class='entry-meta'><span class='time-meta'><a href="http://twitter.com/HugoPoi/statuses/1468960081387474944">04:05:50 décembre 09, 2021</a></span> <span class='from-meta'>from <a href="https://about.twitter.com/products/tweetdeck" rel="nofollow">TweetDeck</a></span></span> <span class="intent-meta"><a href="http://twitter.com/intent/tweet?in_reply_to=1468960081387474944" data-lang="fr" class="in-reply-to" title="Reply">Reply</a><a href="http://twitter.com/intent/retweet?tweet_id=1468960081387474944" data-lang="fr" class="retweet" title="Retweet">Retweet</a><a href="http://twitter.com/intent/favorite?tweet_id=1468960081387474944" data-lang="fr" class="favorite" title="Favorite">Favorite</a></span></li></ul><div class="follow-button"><a href="http://twitter.com/hugopoi" class="twitter-follow-button" title="Follow @hugopoi" data-lang="fr">@hugopoi</a></div></div></div><div id="categories-3" class="widget widget_categories"><h5>Catégories</h5>
<ul>
<li class="cat-item cat-item-136"><a href="/category/fail/">#FAIL</a> (2)
</li>
<li class="cat-item cat-item-51"><a href="/category/dossiers/aventure-pc/">Aventure PC</a> (15)
</li>
<li class="cat-item cat-item-57"><a href="/category/dossiers/aventure-serveur/">Aventure Serveur</a> (6)
</li>
<li class="cat-item cat-item-130"><a href="/category/bidouille/">Bidouille</a> (7)
</li>
<li class="cat-item cat-item-189"><a href="/category/cuisine/">Cuisine</a> (1)
</li>
<li class="cat-item cat-item-38"><a href="/category/developpement/">Développement</a> (3)
</li>
<li class="cat-item cat-item-10"><a href="/category/dossiers/">Dossiers</a> (9)
</li>
<li class="cat-item cat-item-149"><a href="/category/gaming/">Gaming</a> (1)
</li>
<li class="cat-item cat-item-6"><a href="/category/hadopi-2/">Hadopi</a> (5)
</li>
<li class="cat-item cat-item-18"><a href="/category/hardware/">Hardware</a> (22)
</li>
<li class="cat-item cat-item-12"><a href="/category/internet-2/">Internet</a> (10)
</li>
<li class="cat-item cat-item-11"><a href="/category/dossiers/ip-v6/">IP v6</a> (2)
</li>
<li class="cat-item cat-item-13"><a href="/category/logiciels/">Logiciels</a> (12)
</li>
<li class="cat-item cat-item-1"><a href="/category/news/" title="News générale de mon blog, les articles et brèves général.">News</a> (22)
</li>
<li class="cat-item cat-item-47"><a href="/category/test/">Test</a> (5)
</li>
</ul>
</div><div id="linkcat-2" class="widget widget_links"><h5>Blogs et Infos</h5>
<ul class='xoxo blogroll'>
<li><a href="http://blog.rom1v.com" title="Découverte récente, publication de qualité">®om&#039;s blog</a></li>
<li><a href="http://bluetouff.com" title="Un blog hacktiviste avec des idées et des compétences pas comme les autres." target="_blank">☠ Bluetouff</a></li>
<li><a href="http://www.korben.info/" title="Upgrade your Mind" target="_blank">Korben</a></li>
<li><a href="http://www.laquadrature.net/fr" title="La Quadrature du Net Fr" target="_blank">La Quadrature du Net</a></li>
<li><a href="https://www.nextinpact.com/" title="Actualité Informatique" target="_blank">NextInpact</a></li>
<li><a href="http://pixellibre.net/" title="Un petit blog de geek comme on les aime avec du hadopi, de l&rsquo;info et du troll" target="_blank">Pixel Libre.net</a></li>
<li><a href="http://reflets.info" title="Reflets.info fait le pari de devenir le reflet dune société, des individus qui la composent." target="_blank">Reflets</a></li>
<li><a href="http://blog.spyou.org/wordpress-mu/" rel="acquaintance" title="Fabriquer son internet" target="_blank">Turb(l)o(g)</a></li>
</ul>
</div>
<div id="linkcat-76" class="widget widget_links"><h5>Podcast</h5>
<ul class='xoxo blogroll'>
<li><a href="http://www.nowatch.net/category/nowatch-net/nowatch-fm/appload-nowatch-fm/" title="Des Apps pour votre mobile (un peu sponsorisé par Apple mais il y a du Android aussi)" target="_blank">AppLoad</a></li>
<li><a href="http://freepod.net/" title="Libère ton podcast, regroupement de podcast." target="_blank">Freepod</a></li>
<li><a href="http://www.geekinc.fr/" title="On partage la culture geek ! (sponsorisé par Apple mais j&rsquo;aime bien quand même)" target="_blank">GeekInc</a></li>
<li><a href="http://www.captainweb.net/" title="Podcast déjanté de l&rsquo;actu web, super ambiance !" target="_blank">L&#039;Apéro du Captainweb</a></li>
<li><a href="http://www.lagrottedubarbu.com/" title="Hack the technologie" target="_blank">La Grotte du Barbu</a></li>
<li><a href="http://www.poligeek.fr/" title= Un jour les geek domineront le monde, mais pas demain, ya une keynote de Steve Jobs »" target="_blank">PoliGeek</a></li>
<li><a href="http://quadratour.net/" title="Pour les vieux Geeks de l&rsquo;apocalypse…" target="_blank">Quadratour</a></li>
</ul>
</div>
</aside><!-- .sidebar .widget-area -->
</div>
</div>
</article>
</div>
</div>
</div>
<div class="section related-posts">
<div class="container">
<div class="row">
<div class="col-md-12">
<h2 class="hestia-title text-center">Articles similaires</h2>
<div class="row">
<div class="col-md-4">
<div class="card card-blog">
<div class="card-image">
<a href="/2021/01/16/linky-opendata-my-ass/" title="Linky opendata my ass">
<img width="360" height="240" src="/wp-content/uploads/2021/01/IMG_20210104_131322-360x240.jpg" class="attachment-hestia-blog size-hestia-blog wp-post-image" alt="Prototype téléinformation compteur linky" loading="lazy" /> </a>
</div>
<div class="content">
<h6 class="category text-info"><a href="/category/bidouille/" title="Voir tout les articles dans Bidouille" >Bidouille</a> </h6>
<h4 class="card-title">
<a class="blog-item-title-link" href="/2021/01/16/linky-opendata-my-ass/" title="Linky opendata my ass" rel="bookmark">
Linky opendata my ass </a>
</h4>
<p class="card-description">Pour résumer la seule API utilisable en production est l&rsquo;API Enedis qui est accèssible uniquement aux société (personne morale) ayant montré pate blanche auprès d&rsquo;Enedis. Si vous voulez la version longue c&rsquo;est ici. De ce<a class="moretag" href="/2021/01/16/linky-opendata-my-ass/"> Lire la suite&hellip;</a></p>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card card-blog">
<div class="card-image">
<a href="/2019/03/30/le-cloud-maison/" title="Le cloud maison">
<img width="360" height="240" src="/wp-content/uploads/2019/03/IMG_7810-360x240.jpg" class="attachment-hestia-blog size-hestia-blog wp-post-image" alt="" loading="lazy" srcset="/wp-content/uploads/2019/03/IMG_7810-360x240.jpg 360w, /wp-content/uploads/2019/03/IMG_7810-300x200.jpg 300w, /wp-content/uploads/2019/03/IMG_7810-768x512.jpg 768w, /wp-content/uploads/2019/03/IMG_7810-1024x683.jpg 1024w" sizes="(max-width: 360px) 100vw, 360px" /> </a>
</div>
<div class="content">
<h6 class="category text-info"><a href="/category/dossiers/aventure-serveur/" title="Voir tout les articles dans Aventure Serveur" >Aventure Serveur</a> </h6>
<h4 class="card-title">
<a class="blog-item-title-link" href="/2019/03/30/le-cloud-maison/" title="Le cloud maison" rel="bookmark">
Le cloud maison </a>
</h4>
<p class="card-description">Voilà un petit moment que je me devais de faire cet article pour vous en dire un peu plus sur comment je gère mes données numériques au quotidien. Et après plusieurs essais et échecs, je<a class="moretag" href="/2019/03/30/le-cloud-maison/"> Lire la suite&hellip;</a></p>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card card-blog">
<div class="card-image">
<a href="/2018/09/08/niquer-les-drms-damazon-aka-convertir-vos-ebook-vers-epub-sans-drm/" title="Niquer les DRMs d&rsquo;Amazon AKA convertir vos ebook vers EPUB sans DRM">
<img width="360" height="240" src="/wp-content/uploads/2018/09/anti-drm34-360x240.jpg" class="attachment-hestia-blog size-hestia-blog wp-post-image" alt="" loading="lazy" /> </a>
</div>
<div class="content">
<h6 class="category text-info"><a href="/category/dossiers/aventure-pc/" title="Voir tout les articles dans Aventure PC" >Aventure PC</a> </h6>
<h4 class="card-title">
<a class="blog-item-title-link" href="/2018/09/08/niquer-les-drms-damazon-aka-convertir-vos-ebook-vers-epub-sans-drm/" title="Niquer les DRMs d&rsquo;Amazon AKA convertir vos ebook vers EPUB sans DRM" rel="bookmark">
Niquer les DRMs d&rsquo;Amazon AKA convertir vos ebook vers EPUB sans DRM </a>
</h4>
<p class="card-description">Comment j&rsquo;en suis arrivé là Un jour dans une contrée de la blogosphère version 0.666 d&rsquo;Internet, je voulais acheter un livre  numérique car moins cher et puis ça pollue moins ça équivaut à un aller-retour<a class="moretag" href="/2018/09/08/niquer-les-drms-damazon-aka-convertir-vos-ebook-vers-epub-sans-drm/"> Lire la suite&hellip;</a></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="footer-wrapper">
<footer class="footer footer-black footer-big">
<div class="container">
<div class="hestia-bottom-footer-content"><ul class="footer-menu pull-left"><li class="page_item page-item-1232"><a href="/wishlist/">Wishlist</a></li>
</ul>
<div class="copyright pull-right">
Hestia | Développé par <a href="https://themeisle.com%20" rel="nofollow">ThemeIsle</a> </div>
</div> </div>
</footer>
</div>
</div>
<button class="hestia-scroll-to-top">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512" width="12.5px" height="20px"><path d="M177 255.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 351.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 425.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1zm-34-192L7 199.7c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l96.4-96.4 96.4 96.4c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9l-136-136c-9.2-9.4-24.4-9.4-33.8 0z"></path></svg>
</button>
<!-- Matomo -->
<script type="text/javascript">
var _paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="//blog.hugopoi.net/wp-content/plugins/wp-piwik/proxy/"
_paq.push(['setTrackerUrl', u+'piwik.php']);
_paq.push(['setSiteId', '1']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.php'; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Matomo Code -->
<script type='text/javascript' src='/wp-content/plugins/wp-syntax/js/wp-syntax.js?ver=1.1' id='wp-syntax-js-js'></script>
<script type='text/javascript' src='/wp-includes/js/comment-reply.min.js?ver=5.7.4' id='comment-reply-js'></script>
<script type='text/javascript' src='/wp-content/themes/hestia/assets/bootstrap/js/bootstrap.min.js?ver=1.0.2' id='jquery-bootstrap-js'></script>
<script type='text/javascript' src='/wp-includes/js/jquery/ui/core.min.js?ver=1.12.1' id='jquery-ui-core-js'></script>
<script type='text/javascript' id='hestia_scripts-js-extra'>
/* <![CDATA[ */
var requestpost = {"ajaxurl":"https:\/\/blog.hugopoi.net\/wp-admin\/admin-ajax.php","disable_autoslide":"","masonry":""};
/* ]]> */
</script>
<script type='text/javascript' src='/wp-content/themes/hestia/assets/js/script.min.js?ver=3.0.16' id='hestia_scripts-js'></script>
<script type='text/javascript' src='/wp-includes/js/wp-embed.min.js?ver=5.7.4' id='wp-embed-js'></script>
<script async="async" type='text/javascript' src='/wp-content/plugins/akismet/_inc/form.js?ver=4.1.9' id='akismet-form-js'></script>
<script type='text/javascript' src='https://platform.twitter.com/widgets.js?ver=1.0.0' id='twitter-widgets-js'></script>
</body>
</html>