Since SEGA is doing dumb things with their network, Phantasy Star Online 2 players outside of Japan now need to use a VPN or Proxy to connect to the game. This guide will show you how to set up CyberKitsune’s PSO2Proxy on a private Amazon EC2 instance. This is free for a year, and hopefully more stable than some alternative proxy solutions.
What you’ll need
Before we start, get all of these:
- An Amazon AWS Account (requires a credit card)
- Putty (pick the download under “A Windows installer for everything except PuTTYtel”)
- WinSCP
- Notepad++ (or your text editor of choice)
- PSO2Tweaker
Set up an EC2 instance
Once you have an Amazon AWS account, go to http://aws.amazon.com/ec2/ and click “Sign in to the Console”. You should see the following page. Click “EC2”.
Create a new instance and select the Amazon Linux AMI image.
Follow the rest of the wizard to finish creating the EC2 instance. Make sure to download your public key (.pem) file.
Back at the EC2 Dashboard, click “Security Groups” on the left. Create a new security group and allow all incoming TCP and UDP traffic from all IPs. The outbound traffic should allow all protocols and IPs by default.
Save the new security group, then click “Instances” on the left. You only have one instance, so it will already be selected. Click “Actions > Change Security Groups” and switch your instance to your newly created security group.
Now you should be able to connect to your EC2 instance. Follow Amazon’s instructions for connecting to your instance. You can find your public DNS at the bottom of the instances page. Your PuTTY setup should now look like this. Make sure to save these settings as a session.
Click “Open” and a console window should appear. Now we follow the instructions on the PSO2Proxy Github page.
Extract SEGA’s public key
Create a new file named “translation.cfg” at C:\Program Files (x86)\SEGA\PHANTASYSTARONLINE2\pso2_bin
. Run your text editor as administrator and open the file. Paste the following lines into it:
PublicKeyDump:1 PublicKeyPath:SEGAKey.blob
Now run PSO2Tweaker, make sure item translations are enabled, and start PSO2. You can close PSO2 once you get to the title screen. If everything worked properly, you should now have a “SEGAKey.blob” file in your pso2_bin directory. You can now delete translation.cfg.
Install PSO2Proxy
Run the following commands from PuTTY:
sudo yum install python27 python27-pip gcc python27-devel python-twisted git sudo easy_install-2.7 pip git clone https://github.com/cyberkitsune/PSO2Proxy.git ~/PSO2Proxy cd ~/PSO2Proxy sudo pip install -r requirements.txt cd ~/PSO2Proxy/proxy python27 ./PSO2Proxy.py
The server won’t start up, but it will create some config files.
Open WinSCP. It will ask to import your settings from PuTTY. Do so and connect to your EC2 instance. Navigate to /home/ec2-user/PSO2Proxy/proxy/cfg
. Double-click pso2proxy.config.yml and it should open in your text editor. Paste your EC2 instance’s public and private IP addresses in as follows.
admins: [your_sega_id] bindIp: your_ec2_private_ip_here blockNameMode: 1 commandPrefix: '!' enabledShips: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] myIpAddr: your_ec2_public_ip_here noisy: false
Save the file. WinSCP will automatically upload your changes.
In WinSCP, navigate to /home/ec2-user/PSO2Proxy/proxy/keys
. Drag the SEGAKey.blob file you created before onto WinSCP and it will upload the file.
Go back to PuTTY. If you your cursor is on a line starting with >>>
, run the following command to close PSO2Proxy.
exit
Then navigate to the keys directory:
cd keys
Now run the following commands to generate the necessary SSH keys:
openssl genpkey -out myKey.pem -algorithm rsa -pkeyopt rsa_keygen_bits:1024 openssl rsa -in myKey.pem -outform MS\ PUBLICKEYBLOB -pubout -out publickey.blob openssl rsa -pubin -inform MS\ PUBLICKEYBLOB -in SEGAKey.blob -outform PEM -out SEGAKey.pem
Now run the following commands to enable a plug-in which allows PSO2 Tweaker to quickly configure itself:
cd ~/PSO2Proxy/proxy/plugins ln -s disabled/WebAPI.py .
Everything should be configured now.
Start the server
Let’s create a shortcut to start the server. In WinSCP, navigate to /home/ec2-user/ and right-click the directory background. Click “New > File” and name it something like “start-proxy”. Double-click it to edit it and paste the following:
#!/bin/bash export PYTHONIOENCODING=utf-8 PROXY_DIR=~/PSO2Proxy/proxy LOG_FILE=~/PSO2Proxy.log cd $PROXY_DIR nohup python27 PSO2Proxy.py > $LOG_FILE & tail -f $LOG_FILE
Save it and WinSCP will upload your changes. Right click the file in WinSCP and open its properties. Under the Permissions section, check all the “X” boxes. This makes the script executable so you can run it directly.
Now we can start the server from PuTTY by entering the following command:
~/start-proxy
This will start the proxy in the background and start logging its output to the screen. You are free to close PuTTY at this point. Doing so will not stop PSO2Proxy.
If you ever need to restart the EC2 instance, just connect with PuTTY and run this command to restart the proxy.
Now open your web browser to http://your-ec2-public-ip:8080/config.json
(use your EC2 instance’s public IP address). If everything worked, your proxy should respond with
{"host": "your-ec2-public-ip", "version": 1, "name": "Unnamed Server", "publickeyurl": "http://your-ec2-public-ip:8080/publickey.blob"}
Configure PSO2 Tweaker
Start PSO2 Tweaker and click “Menu Orb > Other Tasks > Configure PSO2Proxy Server Settings”. When prompted, enter the config.json URL you tested earlier (http://your-ec2-public-ip:8080/config.json). PSO2 Tweaker should print out “All done! You should now be able to connect to Unnamed Server.” in the log.
You should now be able to connect to PSO2!
Extras
I get a server timed out error when logging in!
Sega’s public key has probably changed. Redo the steps above to get SegaKey.blob and upload it to your keys directory. Open PuTTY and cd to ~/PSO2Proxy/proxy/keys, then run the openssl commands listed above again.
My public IP changed!
If you stop and restart your EC2 instance, your public IP might change. If you change your start-proxy script to the following, it will automatically update pso2proxy.config.yml with your server’s private and public IP addresses.
#!/bin/bash export PYTHONIOENCODING=utf-8 PROXY_DIR=~/PSO2Proxy/proxy LOG_FILE=~/PSO2Proxy.log CFG_FILE=$PROXY_DIR/cfg/pso2proxy.config.yml PRIVATE_IP=$(wget -qO- http://169.254.169.254/latest/meta-data/local-ipv4) PUBLIC_IP=$(wget -qO- http://169.254.169.254/latest/meta-data/public-ipv4) sed -i -e "s/^\(bindIp:\).*$/\1 $PRIVATE_IP/" -e "s/^\(myIpAddr:\).*$/\1 $PUBLIC_IP/" $CFG_FILE cd $PROXY_DIR nohup python27 PSO2Proxy.py > $LOG_FILE & tail -f $LOG_FILE
Then, you just need to go into PSO2 Tweaker and provide the address to config.json, using the new public IP that your EC2 dashboard shows.
I need to stop the proxy
The start-proxy script I listed above will start the proxy such that it doesn’t end when you close PuTTY. If you need to stop the proxy, just run the following command from PuTTY:
sudo killall python27
How do I update the software?
Run the following commands from PuTTY:
cd ~/PSO2Proxy git status
If you see something like this, you have the latest version of PSO2Proxy.
Your branch is up-to-date with 'origin/master'. nothing to commit, working directory clean
If you see something like this, there are updates to download.
Your branch is behind 'origin/master' by 4 commits, and can be fast-forwarded. (use "git pull" to update your local branch) nothing to commit, working directory clean
Make sure the proxy is stopped, then run the following command:
git pull
If it worked, you can now start the proxy back up. If it didn’t work, try this:
git fetch git checkout master git reset --hard origin/master
Revisions
Oct 14, 2014:
- Added a solution for server timeout errors when trying to log in.
Oct 8, 2014:
- Changed a couple lines so you don’t close PuTTY instead of PSO2Proxy in one step if PSO2Proxy has already closed itself.
Oct 2, 2014:
- Changed commands to install and use Python 2.7, because Amazon Linux AMI’s version of Python is ancient and might not work well with PSO2Proxy.
- Fixed an error in the Git command.
- Changed instructions for enabling the WebAPI plug-in to match CyberKitsune’s latest commits.
- Improved the start-proxy script.
- Added instructions to make start-proxy executable.
- Added a section with extra, useful scripts.
Hey, just letting you know, I had some issues with running pip after sudo installing python27-pip. For some reason, it was not installing all dependencies correctly; I had to run this:
sudo easy_install-2.7 pip
In order to install all dependencies required for pip. easy_install is available on AWS, so I had no issues there. Not really an issue with your guide though, cause that is also on the github page for the proxy itself. Might just be something on my end :)
Otherwise, great guide!
Thanks. I’ll add that. I added the Python 2.7 commands mostly from memory after I figured out how to install it through trial and error, so I’m not surprised I missed a step.
Wow! Very nice guide! I love it~
Do you mind if I link to it in the readme.md for PSO2Proxy? A lot of people have issues with AWS setup so that’d be nice c:
Go ahead!
Thanks for this tutorial, it worked great! I appreciate your hard work.
One quick question:
1) Once the PSO2 Tweaker connectivity feature has been enabled, will it download the patches/updates through the AWS EC2 Instance?
I don’t think so.
I believe PSO2 Tweaker is able to download patch files without the use of a proxy. Either Sega is hosting the files on a server with a valid route, or Aida has arranged for the files to be mirrored elsewhere.
I can’t get Sega’s public key. Nothing shows up after I make the cfg file and start pso2 through the tweaker(item translations are on). If it matters, I use cyberkitsune’s proxy server so I have his .blob file there. Any ideas on what to do?
Try using one of the methods listed at CyberKitsune’s Wiki for PSO2Proxy. If that doesn’t work, I’m not sure what’s wrong.
im having some trouble getting it working, i followed the steps and it worked up until Tuesdays maintenance but now any time i try to log on and use it it says server timed out. any idea why or how to fix it?
Nope. I have the same problem. The public instance works fine though. I have opened an issue on the PSO2Proxy Github about this though.
Apparently Sega’s public key can change with updates to the game. Redo the part where you extract and upload Sega’s public key and try again.
awesome, this worked. thanks!
Hi, I dont really know about this kind of things so I have some questions:
-How does AWS really works? Does It gives you a certain amount of data that can get in and out or does it give you a certain amount of time that you can use it?
-I´m planning on getting one for my team (mostly for 4 persons) so can it handle? and how it will behave the amount of time or data that they give you when more than one person use it at the same time?
-How much it matter that I leave it on all the time or Do I have to turn it off when we stop playing?
Sorry for too many questions thanks in advance. :)
You are billed for the amount of time your server runs times the number of instances of it you run. You only need a single instance for this, so the second part isn’t an issue.
You can shut the server down when you aren’t using it to pay less, but the server’s public IP address will probably change and you’ll have to reconfigure it in the Tweaker each time you restart the server.
I keep getting unable to load public key, how can I fix it? Thank you :(
Sorry, I have no idea. I haven’t played PSO2 in a few years. I don’t know what might have changed with PSO2Proxy since then.
I discovered that Kitsune’s Proxy is outdated for now. I created and using my own method to run my team’s proxy server :)