blog post internet sharing
This commit is contained in:
parent
dc1a7e5012
commit
bc971c97c4
@ -0,0 +1,43 @@
|
|||||||
|
---
|
||||||
|
layout: post
|
||||||
|
title: "Internet sharing (ipv4 and ipv6) on archlinux using dnsmasq"
|
||||||
|
date: 2014-02-08 20:02:22 +0100
|
||||||
|
comments: true
|
||||||
|
categories:
|
||||||
|
- arch
|
||||||
|
- dhcp
|
||||||
|
- ipv6 router advertisement
|
||||||
|
---
|
||||||
|
|
||||||
|
A guide to connect with a different machine using a ethernet cable for
|
||||||
|
internet sharing or just transferring files:
|
||||||
|
|
||||||
|
1. Install dnsmasq and iproute2
|
||||||
|
|
||||||
|
$ pacman -S dnsmasq iproute2
|
||||||
|
|
||||||
|
2. Copy over the configuration files at the end of the article and edit the
|
||||||
|
*/etc/conf.d/share-internet* to match your network setup.
|
||||||
|
|
||||||
|
3. Start the sharing service with systemd
|
||||||
|
|
||||||
|
$ sudo systemctl start internet-sharing.service
|
||||||
|
|
||||||
|
After that the other machine can connect via dhcp. It will get an ipv4
|
||||||
|
address from the **10.20.0.0/24** subnet and a ipv6 address from the **fd21:30c2:dd2f::**
|
||||||
|
subnet. Your host will be reachable via **10.20.0.1** or **fd21:30c2:dd2f::1**.
|
||||||
|
Thanks to ipv6 router advertising, an AAAA record for each host is automatically set based on the hostname.
|
||||||
|
This means if your hostname is *foo*, all members of the network can just connect
|
||||||
|
to it using the address *foo*. You should disable the share-internet.service, if
|
||||||
|
you don't need it. Otherwise you might mess up network setups, if you connect to a
|
||||||
|
network with the device on which the dhcp service is running.
|
||||||
|
|
||||||
|
Happy networking!
|
||||||
|
|
||||||
|
{% include_code /etc/conf.d/share-internet lang:bash share-internet/share-internet %}
|
||||||
|
|
||||||
|
{% include_code /etc/systemd/system/share-internet.service lang:ini share-internet/share-internet.service %}
|
||||||
|
|
||||||
|
{% include_code /etc/dnsmasq.conf lang:ini share-internet/dnsmasq.conf %}
|
||||||
|
|
||||||
|
{% include_code /etc/dnsmasq.conf.dhcp lang:bash share-internet/dnsmasq.conf.dhcp %}
|
7
source/downloads/code/share-internet/dnsmasq.conf
Normal file
7
source/downloads/code/share-internet/dnsmasq.conf
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# google as an upstream dns server
|
||||||
|
server=8.8.8.8
|
||||||
|
server=8.8.4.4
|
||||||
|
no-resolv
|
||||||
|
cache-size=2000
|
||||||
|
|
||||||
|
#conf-file=/etc/dnsmasq.conf.dhcp
|
10
source/downloads/code/share-internet/dnsmasq.conf.dhcp
Normal file
10
source/downloads/code/share-internet/dnsmasq.conf.dhcp
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# no need to modify
|
||||||
|
# ingoing and outgoing device will be set by the systemd service
|
||||||
|
interface=enp0s25
|
||||||
|
no-dhcp-interface=wlp3s0
|
||||||
|
dhcp-range=10.20.0.100,10.20.0.199,infinite
|
||||||
|
dhcp-option=3,10.20.0.1 # router
|
||||||
|
dhcp-option=5,10.20.0.1 # dns
|
||||||
|
dhcp-option=42,10.20.0.1 # ntp
|
||||||
|
dhcp-range=fd21:30c2:dd2f::,ra-stateless,ra-names,infinite
|
||||||
|
enable-ra
|
4
source/downloads/code/share-internet/share-internet
Normal file
4
source/downloads/code/share-internet/share-internet
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
# Network device where other hosts are connect to, ex: eth0
|
||||||
|
INTERNAL_DEVICE="enp0s25"
|
||||||
|
# Device which has internet access, ex: wlan0 or usb0
|
||||||
|
EXTERNAL_DEVICE="wlp3s0"
|
27
source/downloads/code/share-internet/share-internet.service
Normal file
27
source/downloads/code/share-internet/share-internet.service
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
[Unit]
|
||||||
|
Description='share internet'
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
EnvironmentFile=/etc/conf.d/share-internet
|
||||||
|
RemainAfterExit=yes
|
||||||
|
ExecStart=/usr/bin/sed -ie 's!^#conf-file=/etc/dnsmasq\.conf\.dhcp!conf-file=/etc/dnsmasq.conf.dhcp!' /etc/dnsmasq.conf
|
||||||
|
ExecStart=/usr/bin/sed -ie 's/^interface=[[:alnum:]]+/interface=$INTERNAL_DEVICE/' /etc/dnsmasq.conf.dhcp
|
||||||
|
ExecStart=/usr/bin/sed -ie 's/^no-dhcp-interface=[[:alnum:]]+/no-dhcp-interface=$EXTERNAL_DEVICE/' /etc/dnsmasq.conf.dhcp
|
||||||
|
ExecStart=/usr/bin/iptables -t nat -A POSTROUTING -o $EXTERNAL_DEVICE -j MASQUERADE
|
||||||
|
ExecStart=/usr/bin/ip6tables -t nat -A POSTROUTING -o $EXTERNAL_DEVICE -j MASQUERADE
|
||||||
|
ExecStart=/usr/bin/sysctl -w net.ipv4.ip_forward=1 net.ipv6.conf.all.forwarding=1
|
||||||
|
ExecStart=/usr/bin/ip addr add 10.20.0.1/24 dev $INTERNAL_DEVICE
|
||||||
|
ExecStart=/usr/bin/ip addr add fd21:30c2:dd2f::1/64 dev $INTERNAL_DEVICE
|
||||||
|
ExecStart=/usr/bin/systemctl restart dnsmasq
|
||||||
|
|
||||||
|
ExecStop=/usr/bin/ip addr del 10.20.0.1/24 dev $INTERNAL_DEVICE
|
||||||
|
ExecStop=/usr/bin/ip addr del fd21:30c2:dd2f::1/64 dev $INTERNAL_DEVICE
|
||||||
|
ExecStop=/usr/bin/sysctl -w net.ipv4.ip_forward=0 net.ipv6.conf.all.forwarding=0
|
||||||
|
ExecStop=/usr/bin/iptables -t nat -D POSTROUTING -o $EXTERNAL_DEVICE -i $INTERNAL_DEVICE -j MASQUERADE
|
||||||
|
ExecStop=/usr/bin/ip6tables -t nat -D POSTROUTING -o $EXTERNAL_DEVICE -i $INTERNAL_DEVICE -j MASQUERADE
|
||||||
|
ExecStop=/usr/bin/sed -ie 's!^conf-file=/etc/dnsmasq\.conf\.dhcp!#conf-file=/etc/dnsmasq.conf.dhcp!' /etc/dnsmasq.conf
|
||||||
|
ExecStop=/usr/bin/systemctl restart dnsmasq
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
Loading…
Reference in New Issue
Block a user