Difference between revisions of "Slip configuration on linux host"
Line 1: | Line 1: | ||
DOSBox supports nullmodem connection using tcp sockets. In this page, we describe a simple networking slip configuration on linux (ubuntu) host. With socat or similar tools on host's side, you can connect these sockets with slattach, and the DOSBox guest can access internet as well. | DOSBox supports nullmodem connection using tcp sockets. In this page, we describe a simple networking slip configuration on linux (ubuntu) host. With socat or similar tools on host's side, you can connect these sockets with slattach, and the DOSBox guest can access internet as well. | ||
+ | |||
+ | == WARNING! == | ||
+ | |||
+ | The included script and manual is dangerous. It needs sudo or root access to the target host, uses external dependencies, can cause damage and irrecoverable package dependency problems via apt installing, and may be harmful when you are not familiar with tcp/ip ipv4 networking or linux iptables/slattach/etc. tools. | ||
== Prerequisities under ubuntu == | == Prerequisities under ubuntu == | ||
Line 13: | Line 17: | ||
apt-get install bash dosbox iptables socat sudo unzip wget | apt-get install bash dosbox iptables socat sudo unzip wget | ||
+ | |||
+ | === Other requirements === | ||
+ | |||
+ | ETHERSL.COM from crynwr packet collection, and IRCJR.EXE from mTCP applications. See links for more information at the end of this page. The containing zipfiles will be downloaded automatically if the don't exist. | ||
=== The main script: slipbox.sh === | === The main script: slipbox.sh === |
Latest revision as of 11:03, 24 June 2016
DOSBox supports nullmodem connection using tcp sockets. In this page, we describe a simple networking slip configuration on linux (ubuntu) host. With socat or similar tools on host's side, you can connect these sockets with slattach, and the DOSBox guest can access internet as well.
WARNING!
The included script and manual is dangerous. It needs sudo or root access to the target host, uses external dependencies, can cause damage and irrecoverable package dependency problems via apt installing, and may be harmful when you are not familiar with tcp/ip ipv4 networking or linux iptables/slattach/etc. tools.
Prerequisities under ubuntu
Internet settings
A working internet connection is essential. 192.168.7.0/30 network must be unused! Otherwise network range collision will happen, causing unpredictable results!
Required ubuntu packages
And also the following packages needs to be installed:
apt-get install bash dosbox iptables socat sudo unzip wget
Other requirements
ETHERSL.COM from crynwr packet collection, and IRCJR.EXE from mTCP applications. See links for more information at the end of this page. The containing zipfiles will be downloaded automatically if the don't exist.
The main script: slipbox.sh
The content of the slipbox.sh
#! /bin/bash flushipt() { for i in $( iptables -t nat -n --line-numbers -L | awk '/^Chain POSTROUTING/,/^$/{print $0}' \ | grep '^[0-9]' | grep '192\.168\.7\.' | awk '{ print $1 }' | tac ) do iptables -t nat -D POSTROUTING "$i" done for i in $( iptables -t nat -n --line-numbers -L | awk '/^Chain PREROUTING/,/^$/{print $0}' \ | grep ^[0-9] | grep '192\.168\.7\.' | awk '{ print $1 }' | tac ) do iptables -t nat -D PREROUTING "$i" done } if id -u | grep -q '^0'; then : else echo 'dosbox slip setter' echo 'Author: Naszvadi Peter' echo echo "Please run $0 as root!" echo exit 1 fi if ! which socat; then echo echo 'Install socat! It is required.' echo echo 'e.g. sudo apt-get install socat' echo exit 1 fi if ! which slattach; then echo echo 'Install slattach! It is required.' echo exit 1 fi if ! which dosbox; then echo echo 'Install dosbox! It is required.' echo exit 1 fi Uid="$(find "$0" -printf '%U' -quit)" if [ -z "$(find . -iname ethersl.com)" ]; then if ! which unzip; then echo echo 'Install unzip! It is required.' echo exit 1 fi if ! which wget; then echo echo 'Install wget! It is required.' echo exit 1 fi sudo -u "#$Uid" bash -c 'wget -q http://crynwr.com/drivers/pktd11.zip \ && unzip -Cj pktd11.zip ethersl.com' fi if [ -z "$(find . -iname ethersl.com)" ]; then echo echo 'Unsuccesful: getting ethersl.com' echo exit 1 fi if [ -z "$(find . -iname ircjr.exe)" ]; then if ! which unzip; then echo echo 'Install unzip! It is required.' echo exit 1 fi if ! which wget; then echo echo 'Install wget! It is required.' echo exit 1 fi sudo -u "#$Uid" bash -c 'wget -q -O mtcp.zip http://www.brutman.com/mTCP/mTCP_2013-05-23.zip \ && unzip -Cj mtcp.zip ircjr.exe' fi if [ -z "$(find . -iname ircjr.exe)" ]; then echo echo 'Unsuccesful: getting ircjr.exe' echo exit 1 fi echo Flushing... flushipt echo Flushing done Dev_Pts='/tmp/slip'"$RANDOM" Slip_Port=8040 if ! [ -e dosslip.cnf ]; then sudo -u "#$Uid" bash -c 'cat <<END > dosslip.cnf [sdl] mapperfile=mapper.map [serial] serial1=nullmodem server:localhost port:'"$Slip_Port"' transparent:1 [autoexec] mount C . C: ethersl 0x60 4 0x3f8 9600 SET MTCPSLIP=true SET MTCPCFG=C:\\MTCP.CFG ircjr irc.freenode.net #dosbox END' fi if ! [ -e mtcp.cfg ]; then sudo -u "#$Uid" bash -c 'cat <<END > mtcp.cfg DHCPVER DHCP Client version Jul 29 2011 TIMESTAMP Mon May 21 13:14:59 2012 packetint 0x60 hostname DOSRules ircjr_nick dbxij'"$RANDOM"' ircjr_user dbxij'"$RANDOM"' ircjr_name McBus Luck ircjr_connect_timeout 300 ircjr_register_timeout 300 ftpsrv_password_file NUL ftpsrv_log_file NUL IPADDR 192.168.7.2 NETMASK 255.255.255.252 GATEWAY 192.168.7.1 NAMESERVER 8.8.8.8 LEASE_TIME 600 END' fi socat PTY,link="$Dev_Pts",raw,echo=0 TCP-LISTEN:"$Slip_Port" & Pid_Saved_3="$!" sleep 1 sudo -u "#$Uid" dosbox -conf dosslip.cnf & Pid_Saved="$!" # setting linux ipv4 forwarding grep -q 1 /proc/sys/net/ipv4/ip_forward || ( echo 1 1>/proc/sys/net/ipv4/ip_forward ) slattach -d -s 9600 -p adaptive "$Dev_Pts" 1>/dev/null 2>/dev/null & Pid_Saved_2="$!" sleep 3 ifconfig sl0 192.168.7.1 dstaddr 192.168.7.2 netmask 255.255.255.252 mtu 576 up 1>/dev/null 2>/dev/null set -x iptables -t nat -A POSTROUTING -s 192.168.7.0/30 -j MASQUERADE 1>/dev/null 2>/dev/null set +x while ps "$Pid_Saved" 1>/dev/null 2>/dev/null; do sleep 5 done 1>/dev/null 2>/dev/null 2>&- kill -9 "$Pid_Saved_2" "$Pid_Saved_3" 1>/dev/null 2>/dev/null echo Flushing... flushipt echo Flushing done exit 0 ## This is the end of slipbox.sh !
Before invoking the "sudo ./slipbox.sh" from terminal, a mapper.map file should be generated, in which the alt key assigned to right ctrl. See more on Keymapper . Mapperfile creation step is only needed for this specific example, for the running of mTCP irc client "ircjr", which needs alt-[NUM] keycombos for changing between windows.
Launch a networked session under ubuntu
Creating working directory
Create a standalone folder, e.g. mkdir ~/dosslip
Creating files
Only slipbox.sh and mapper.map is needed. slipbox.sh should be saved from this site, and mapper.map could be created by invoking
dosbox -conf /dev/null .
in dosslip folder (ctrl-f1, save). Rename mapper* to mapper.map, then edit it: replace 'key_lalt' line to 'key_lalt "key 305"'
Set attributes of slipbox.sh:
chmod 755 slipbox.sh
Optionally, you can get and place ETHERSL.COM from crynwr packet driver collection and IRCJR.EXE from mTCP collection, but these are downloaded during the running of dosslip, if they don't exist.
Launch ./slipbox.sh
Do it with sudo:
sudo ./slipbox.sh
If everything is okay, you can get similar result like this: